![](/img/trans.png)
[英]Namespace/prefix for CSS classes, shared between Javascript and (S)CSS
[英]Property shared between classes in javascript
function myclass(){
}
myclass.prototype = {
stuff: {},
getStuff: function(){
return Object.keys(this.stuff).length;
}
};
var m1 = new myclass();
m1.stuff[5] = 'test';
m1.stuff[6] = 'test';
var m2 = new myclass();
m2.stuff[12] = 'test';
m2.stuff[14] = 'test';
alert(m2.getStuff()); // 4 instead of 2 ?!
有人可以解釋為什么警報顯示4嗎?
如果我創建了函數的新實例,則stuff屬性應該為空。
您在這里所做的事情通常被認為是不好的做法。 您不想覆蓋原型,但是想要添加到原型。
現在到您問題的核心。 您正在將stuff
定義為原型的屬性。 這意味着使用該原型創建的任何對象都將共享該對象。 如果您希望每個實例都擁有自己的stuff
,則它必須是一個實例變量:
function myclass(){
this.stuff = {};
}
myclass.prototype = {
getStuff: function(){
return Object.keys(this.stuff).length;
}
};
但是就像我說的,不要重新定義原型,而是添加它:
function myclass(){
this.stuff = {};
}
myclass.prototype.getStuff = function(){
return Object.keys(this.stuff).length;
}
現在,添加到stuff
都只會添加到該特定實例中:
var foo = new myclass();
foo.stuff.thing = "Hey, I'm foo";
var bar = new myclass();
bar.stuff.thing = "Hey, I'm bar";
console.log(bar.stuff); //{thing: "Hey, I'm bar"}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.