我刚刚开始使用原型JavaScript,并且我很难弄清楚this当范围发生变化时如何在原型函数内保留对主对象的引用.让我说明一下我的意思(我在这里使用jQuery):
MyClass = function() {
this.element = $('#element');
this.myValue = 'something';
// some more code
}
MyClass.prototype.myfunc = function() {
// at this point, "this" refers to the instance of MyClass
this.element.click(function() {
// at this point, "this" refers to the DOM element
// but what if I want to access the original "this.myValue"?
});
}
new MyClass();
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过以下方式执行此操作来保留对主对象的引用myfunc:
var myThis = this;
Run Code Online (Sandbox Code Playgroud)
然后使用myThis.myValue访问主对象的属性.但是当我有一大堆原型函数时会发生什么MyClass?我是否必须this在每个开头保存引用?似乎应该有一个更清洁的方式.这样的情况怎么样:
MyClass = function() {
this.elements $('.elements'); …Run Code Online (Sandbox Code Playgroud) 我是一个完整的Javascript newb,我正试图围绕OLN.我遇到的是,当从同一个对象上的另一个方法调用一个对象方法时,被调用方法中'this'的本地值的值正在改变.这是我的代码:
var generator = {
generateForLevelSkillAndCount : function(level, skill, count) {
var functionCall = this['generate_' + level + '_' + skill];
return functionCall(count);
},
generate_0_4 : function(count) {
return this.generate_generic_dots(count, 3);
},
generate_generic_dots : function(count, maxDots) {
/* do cool stuff and return it */
}
};
Run Code Online (Sandbox Code Playgroud)
所以,我打电话generator.generateForLevelSkillAndCount(0, 4, 20),它正常工作,打电话generate_0_4(count).然而,这是失败的地方,Chrome的Javascript控制台告诉我"未捕获的TypeError:对象[对象DOMWindow]没有方法'generate_generic_dots'."
我知道的问题是,问题是thisin 的值generate_0_4是一个DOMWindow对象,而不是生成器(这this是指向的内容,generateForSkillLevelAndCount但我无法弄清楚为什么会发生这种情况.
更新:我根据CMS的建议更新了示例代码eval,但是返回了相同的错误,因此它不仅仅是一个eval错误.