2016-01-08 110 views
2

我有一個函數對象,我喜歡將所有這些屬性的另一個函數原型化。如何爲所有對象屬性創建原型函數?

例子:

var test = function(num) { 
    return num * num/(num/4); 
} 

var obj = { 
    item1: item1, //this is a function already setted. 
    item2: item2, //this is a function already setted. 
    item3: item3 //this is a function already setted 
} 

我想是這樣的:obj.item1().test()沒有設定this.test每個函數內。

+2

向我們展示'item1','item2'和'item3'。 – thefourtheye

+0

這只是一個例子,它可以是'var itemX = function(val){this.num = val; return this.num};' –

+0

他們共享的唯一原型是'Function.prototype';你想編輯它嗎? – dandavis

回答

2

test功能

return num * num/(num/4); 

完全等同於num * 4據我可以看到。

無論如何,評論中給出的示例itemX會返回一個數字。只有這樣,才能夠調用函數test上的號碼將其添加到Number原型,有些人會說是一個壞主意:

Object.defineProperty(Number.prototype, 'test', { value: function() { 
    return this * this/(this/4); 
}); 

如果您希望能夠以鏈test從調用obj.itemX的結果,那麼後者需要返回this,不this.num

var itemX = function(val) {this.num = val; return this}; 

現在你只需要放置的test修改版本一旦obj

var obj = { 
    item1: item1, //this is a function already set. 
    item2: item2, //this is a function already set. 
    item3: item3, //this is a function already set. 

    test: function() { return test(this.num); } 
}; 

> obj.item1(22).test() 
< 88 

我該如何爲所有對象屬性製作原型函數?

如果您所指的是test,這不是原型功能。這只是一個普通的舊對象方法。要添加它,只需將其添加到對象上,如上所述。

+0

哦,是的,是的,我的錯誤。我從手機上寫下了這個功能,很困。但它只是例如。謝謝 P.s:Object.defineProperty在關閉函數前缺少'}'。 –