虽然这个问题之前已经有人问过,而且很多人已经回答了,但我的问题严格的是关于新创建函数的原型。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