2011-09-13 119 views
2

這裏是一個對象:JavaScript:修改對象變量的原型?

var obj = new function(){ 
    this.prop = {}; 
} 

,我嘗試做一些事情,如:
obj.prop.prototype["new_attr"] = "some_value";

我想怎麼辦,被永久修改obj.prop以包含新的屬性。根據我的理解,所有「對象」都有原型,但JavaScript告訴我prop沒有原型。

也許我採取了錯誤的方法(試圖永久修改prop),但我至少想知道爲什麼上面的代碼不起作用。

回答

6

通常,您從構造函數訪問prototype對象,但是你可以從它一個對象,但不使用.prototype

獲取對象原型對象的非官方方式(不支持在所有瀏覽器中)使用__proto__屬性。 (我相信它在支持(編輯)它的瀏覽器中已被棄用)。

獲取對象的原型對象的官方ECMAScript 5方法(在所有瀏覽器中都不支持)是使用Object.getPrototypeOf()

在你的情況下,.prop引用了一個對象文字,所以你已經知道原型是Object.prototype

Object.getPrototypeOf({}) === Object.prototype; // true 

請注意,擴展Object.prototype幾乎總是一個壞主意。


「也許我採取了錯誤的方式(在試圖永久地修改道具),但我至少想知道爲什麼上面的代碼是行不通的。」

如果你只是想修改由.prop引用的對象,然後簡單地做:

obj.prop.new_attr = "some_value"; 
1

你可以完成你正在嘗試做的,但你需要的道具對象添加到構造函數原型:

var Obj = function() {}; 

Obj.prototype.prop = { bar: 'bar value' }; 

var obj_1 = new Obj(); 

console.log(obj_1.prop.bar); //bar value 

obj_1.prop.foo = 'foo value'; 

var obj_2 = new Obj(); 

console.log(obj_2.prop.foo); //foo value