相关疑难解决方法(0)

在JavaScript原型函数中保留对"this"的引用

我刚刚开始使用原型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 oop scope this prototype-programming

89
推荐指数
3
解决办法
6万
查看次数

为什么这个闭包不能访问'this'关键字? - jQuery

我是闭包的初学者(以及一般的Javscript),我无法找到关于此代码中发生了什么的令人满意的解释:

function myObject(){
    this.myHello = "hello";
    this.myMethod = do_stuff;
}

function do_stuff(){
    var myThis = this;
    $.get('http://example.com', function(){
        alert(this.myHello);
        alert(myThis.myHello);
    });
}

var obj = new myObject;
obj.myMethod();
Run Code Online (Sandbox Code Playgroud)

它会提醒'undefined'然后'hello'.显然这不应该是特定于jQuery的,但这是我能想到的最原始代码的最简单形式.闭包do_stuff()可以访问该范围内的变量,但显然此规则不适用于this关键字.

问题:

发生什么this时,闭合的范围之外传递do_stuff()(在这种情况下$.get())?是否myThis包含它的副本this或引用?this在封闭中使用通常不是一个好主意吗?

任何回应都非常赞赏.

javascript jquery closures this

14
推荐指数
1
解决办法
3525
查看次数

有没有比设置变量更好的方法?

在我的javascript对象中,我发现自己写了这个:

this_object = this;
Run Code Online (Sandbox Code Playgroud)

看来这是将成员变量传递给外部函数的唯一方法......

google.maps.event.addListener(this.marker, 'click', function() {
    this.info_window.setContent('Chicago marker');
    this.info_window.open(this.map,this.marker);
});
Run Code Online (Sandbox Code Playgroud)

这是不行的,我有对象复制到一个成员变量,并通过新的对象(和替换所有thisthis_object)

这感觉很难看.是否有"更好"或"更清洁"的方式,或者这是我唯一的选择?

javascript oop callback javascript-objects

8
推荐指数
1
解决办法
158
查看次数

Javascript'this'值改变了,但无法弄清楚原因

我是一个完整的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错误.

javascript

3
推荐指数
1
解决办法
680
查看次数