雖然這個問題之前已經有人問過,而且很多人已經回答了,但我的問題嚴格的是關於新創建函數的原型。Javascript:在給定對象中動態創建的函數問題
如果你閱讀這段代碼,你會明白它的工作原理。也在這裏codepen。
// main object
var Foo = {};
// main methods
Foo.render = {}; // the Render function to populate later
Foo.start = function(el,ops){
return new Actions(el,ops);
}
// secondary/utility functions
var Actions = function(el,ops){
this.el = document.querySelector(el);
this.ops = ops || {};
this.prepare(); // this builds the Foo.render functions
for (var p in this.ops){
Foo.render[p](this);
}
};
// Action methods
Actions.prototype.prepare = function(){
for (var p in this.ops) {
Foo.render[p] = function(that){ // or r[p]
that.el.style[p] = that.ops[p] + 'px';
}
}
}
// init
var action = new Foo.start('div',{left:15})
// check
console.log(Foo.render['left'].prototype);
<div></div>
的問題是新創建的功能Foo.render['left']
的原型是這樣Foo.render.(anonymous function) {}
而不是像Foo.render.left() {}
或別的東西,和我遇到一些性能損失,因爲我無力非常快地訪問新創建的函數的原型。
任何人都可以請介紹一下如何在Foo
範圍內調整.prepare()
函數以創建準確/可訪問(我無法選擇正確的單詞)原型函數嗎?
謝謝。
所有功能確實有'Function.prototype'作爲其prototoype。這沒什麼錯。 – Bergi
您應該在該循環中添加一個'if(!(p in Foo.render))',這樣您就不會爲每個新的'Actions'實例重新創建函數。 – Bergi
您似乎有[循環問題中的標準閉包](http://stackoverflow.com/q/750486/1048572),但我無法真正看到你想在這裏做什麼或爲什麼。 – Bergi