簡體   English   中英

javascript中的類之間共享的屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM