2012-12-27 56 views
1

我希望能夠添加/修改對象的屬性和方法,而無需不斷引用對象變量。例如:在JavaScript中修改對象實例方法和屬性

var myObj = new MyClass(); 

myObj.function() { 
    this.str = 'String'; 
    this.fn = function() { 
     // Function here... 
    } 
} 

至於反對:

var myObj = new MyClass(); 

myObj.str = 'String'; 
myObj.fn = function() { 
    // Function here... 
} 

據我所知,第一個例子中不起作用,因爲你不能叫這樣一個匿名函數。但是有沒有辦法能夠做到這樣的事情,以便可以在對象變量作用域中編寫代碼塊。我希望能夠使用'this'而不是變量名。

請注意,我只想爲一個對象的單個實例執行此操作......我不需要修改該類或創建一個新的對象。

回答

3

你可以做這樣的事情:

(function() { 
    this.str = 'String'; 
    this.fn = function() { /* ... */ }; 
}).call(myObj); 

甚至更​​簡單:

(function (x) { 
    x.str = 'String'; 
    x.fn = function() { /* ... */ }; 
})(myObj); 

但我要問你爲什麼要這麼做。是myObj一些荒謬的長名字?

+0

是的,這是相當長的...而且我還增加了更多的屬性和方法。我沒有太多的重複變量名稱遵循良好的面向對象操作。 – McShaman

3
function decorateInstance() { 
    this.foo = "42"; 

    this.go = function() { 
     return this.foo; 
    } 
} 

var o = {}; 
decorateInstance.call(o); 
console.log(o.foo); 
console.log(o.go());​ 
+0

也是一個很好的解決方案。謝謝彼得! – McShaman

相關問題