改變可能有人在一個合理的方式給我講解一下:原型對象可以從例如
function One() {}
One.prototype.obj = { key: 'value' };
One.prototype.str = 'string';
var inst1 = new One(),
inst2 = new One();
// now let’s change some things in our second instance
inst2.obj.key = 'buh!';
inst2.str = 'buh!';
// ok, so what happens to our other instance?
console.log(inst1.str); // Yields 'string' (unaffected, expected)
console.log(inst1.obj.key); // Yields 'buh!' (!!)
console.log(One.prototype.obj.key); // is also 'buh!'
看來,如果一個原型包含對象,您創建使用new
關鍵字的實例有對象,但如果你改變它,你也改變原型對象,從而影響所有的實例,如兄弟姐妹繼承模式...
這是它的方式工作?
是的,如果你想禁用它,你可以凍結一個對象:'Object.freeze(One.prototype.obj);'。 – pimvdb
不錯,不知道凍結。但瀏覽器支持似乎很窄http://kangax.github.com/es5-compat-table/ – David
@大衛所有當前的瀏覽器實現'freeze'! ':P' –