相关疑难解决方法(0)

如何在回调中访问正确的`this`?

我有一个构造函数,它注册一个事件处理程序:

function MyConstructor(data, transport) {
    this.data = data;
    transport.on('data', function () {
        alert(this.data);
    });
}

// Mock transport object
var transport = {
    on: function(event, callback) {
        setTimeout(callback, 1000);
    }
};

// called as
var obj = new MyConstructor('foo', transport);
Run Code Online (Sandbox Code Playgroud)

但是,我无法data在回调中访问已创建对象的属性.它看起来this并不是指创建的对象,而是指另一个对象.

我还尝试使用对象方法而不是匿名函数:

function MyConstructor(data, transport) {
    this.data = data;
    transport.on('data', this.alert);
}

MyConstructor.prototype.alert = function() {
    alert(this.name);
};
Run Code Online (Sandbox Code Playgroud)

但它表现出同样的问题.

如何访问正确的对象?

javascript callback this

1309
推荐指数
12
解决办法
36万
查看次数

如何在Javascript中将类对象的名称作为字符串?

假设我在Javascript中实例化一个对象,如下所示:

var myObj = new someObject();
Run Code Online (Sandbox Code Playgroud)

现在,是否可以'myObj'从其中一个类方法中获取var对象的名称作为字符串?


其他细节(编辑):

我想得到保持对象引用的变量名称的原因是我的new myObjDIV在页面上创建一个需要调用函数的新的clickable myObj.someFunction().当我插入新的时,DIV我需要知道保持对象引用的变量的名称.有没有更好的方法呢?


你是对的,对不起术语的混淆.

我想得到保持对象引用的变量名称的原因是我的新myObj将在页面上创建一个需要调用函数myObj.someFunction()的新的可点击DIV.当我插入新的DIV时,我需要知道保持对象引用的变量的名称.有没有更好的方法呢?

javascript class

39
推荐指数
3
解决办法
15万
查看次数

javascript事件循环问题

我想知道事件循环如何在javascript中工作,我使用的是node.js,但我想同样的问题适用于浏览器.

我有一些异步调用(让我们说setTimeout$.ajaxfs.readFile),一段时间后事件循环执行callback

现在当callback被执行时,幕后发生了什么?它是否会恢复它在调用异步内容时使用的堆栈?

在实践中,回调所处的背景是什么?它是如何工作的?

编辑:谢谢,我看到......还有一个问题,事件循环如何"记住"回调的范围?

javascript browser this event-loop node.js

11
推荐指数
1
解决办法
1479
查看次数

JavaScript原型'这个'问题

这是我上一期提问的后续问题.

简单的javascript原型问题

我是一个使用JavaScript的新人prototype,很抱歉第二篇文章.

我想点击的元素分配idthis.name数组.

task.prototype.init=function(){  
      this.name=[];  //this.name array has to be defined here

        for (var i; i<5; i++){
            var Link=document.createElement('a');
                Link.innerHTML='click';
                Link.id=value[i];   //I want to assign the value to the this.name array
                Link.href='#'
                Link.onclick=this.changeName;
                document.body.appendChild(Link);
         }
}
task.prototype.changeName=function(){  

     //How do I push the this.id to the property this.name?

     //the code below won't work because this refer to the <a> element. 
     this.name.push(this.id);     

    return false;
    }
Run Code Online (Sandbox Code Playgroud)

有关任务的任何提示吗?

javascript

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

将原型函数作为参数传递而不会丢失'this'上下文

我通过原型在JavaScript中定义了一个" ".

func()第一次运行时,它可以工作,但是当它第二次被调用时,通过setTimeout,它会失败,因为这次它已经丢失了对象上下文,IE 不再引用该对象,而是现在引用窗口.

有没有办法可以在使用原型的同时克服这个问题?或者我是否需要使用闭包来定义" "?

function klass(){}

klass.prototype = {
  a: function() {
    console.log( "Hi" );
  },    
  func: function(){
    this.a();
    setTimeout( this.func, 100 );
  }
};

var x = new klass();
x.func();
Run Code Online (Sandbox Code Playgroud)

javascript function-prototypes prototype-programming

4
推荐指数
1
解决办法
2050
查看次数