如果我有一個構造函數,並且想要添加其他屬性,應該使用哪個屬性? constructorName.nameofProperty或constructorName.prototype.nameofProperty?有什麼不同?Javascript原型添加屬性的方法
0
A
回答
0
如果您查看下面代碼片段的控制檯輸出結果,您會發現向對象原型中添加內容會將其添加到構造函數的所有實例中。 Jill和Tim現在都有setAge方法,但只有Jill實際上已經設定了她的年齡。另外,直接添加到構造函數的東西不會繼承到實例。
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
var Tim = new Person("Tim", "Dawson");
var Jill = new Person("Jill", "Swanson");
Person.prototype.setAge = function(age) {
this.age = age;
}
Jill.setAge(28);
Person.doesThisInherit = function() {
console.log("No it doesn't");
}
var Sam = new Person("Sam", "Testy");
console.log(Tim);
console.log(Jill);
console.log(Sam);
0
這要看情況。
你想從構造函數返回的對象具有這些屬性嗎?如果是這樣,你必須把這個資源增加,從構造函數返回的對象:
var constructorFunction = function() {
this.someProperty = someValue;
}
你想屬性添加到構造函數(記住函數是對象,因此您可以將屬性添加到他們)?如果是這樣,
constructorName.someProperty = someValue
我不認爲這是你想要的。這不會影響從構造函數返回的對象。它只是爲該函數添加一個屬性。
如果需要,您可以將屬性附加到原型。這意味着用該函數構造的所有對象(如果使用'new'前綴調用它)將通過其原型鏈引用該屬性。這意味着每一個對象都沒有自己的屬性副本,但都會引用同一個對象。也就是說,附加到構造函數原型對象的那個。這可以節省你的記憶,如果這是一個問題。如果不是,那麼最好讓每個對象擁有該屬性的副本,這是第一個例子所做的。這樣,更改其中一個對象的屬性不會影響從相同構造函數創建的其他對象。
相關問題
- 1. 的Javascript原型不添加方法
- 2. 添加方法到原型
- 3. Javascript:原型繼承和原型屬性
- 4. JavaScript原型屬性和原型鏈接
- 5. Javascript原型方法「無法設置屬性」
- 6. 原型屬性問題javascript
- 7. Javascript - 是否在類中定義了方法原型或屬性?
- 8. Javascript覆蓋/添加到原型的方法
- 9. 添加本地數組原型方法
- 10. 的Javascript不繼承原型屬性
- 11. JavaScript中的原型/類/公共屬性
- 12. JavaScript本地原型:擴展,添加和覆蓋方法?
- 13. javascript將原型方法添加到所有函數中?
- 14. 的Javascript:添加屬性的方法問題
- 15. (用於Office的JavaScript API 1.3)自定義屬性添加方法
- 16. 向javascript對象添加屬性的不同方法
- 17. 無法將ModelBinder屬性添加到輸入模型的屬性
- 18. Javascript原型方法與內部方法
- 19. JavaScript:通過原型分配屬性
- 20. Javascript + Angular +原型清除對象屬性
- 21. javascript原型繼承 - 共享屬性
- 22. javascript原型繼承和對象屬性
- 23. 方法的javascript屬性
- 24. JavaScript:如何添加屬性?
- 25. 向onSelectionchanged屬性添加方法
- 26. jQuery attr方法未能添加屬性
- 27. 將自定義方法添加到模型屬性?
- 28. TYPO3添加屬性和方法到模型
- 29. IE7 +原型 - 添加SELECT方法後跟Element.addMethods()= no SELECT方法
- 30. JavaScript原型屬性未定義的情況。想找出原因
[將新屬性添加到沒有.prototype的構造函數中](http://stackoverflow.com/questions/9582341/adding-new-properties-to-constructor-function-without-prototype) – str