我有一个构造函数,它注册一个事件处理程序:
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中实例化一个对象,如下所示:
var myObj = new someObject();
Run Code Online (Sandbox Code Playgroud)
现在,是否可以'myObj'从其中一个类方法中获取var对象的名称作为字符串?
我想得到保持对象引用的变量名称的原因是我的new myObj会DIV在页面上创建一个需要调用函数的新的clickable myObj.someFunction().当我插入新的时,DIV我需要知道保持对象引用的变量的名称.有没有更好的方法呢?
你是对的,对不起术语的混淆.
我想得到保持对象引用的变量名称的原因是我的新myObj将在页面上创建一个需要调用函数myObj.someFunction()的新的可点击DIV.当我插入新的DIV时,我需要知道保持对象引用的变量的名称.有没有更好的方法呢?
我想知道事件循环如何在javascript中工作,我使用的是node.js,但我想同样的问题适用于浏览器.
我有一些异步调用(让我们说setTimeout或$.ajax或fs.readFile),一段时间后事件循环执行callback
现在当callback被执行时,幕后发生了什么?它是否会恢复它在调用异步内容时使用的堆栈?
在实践中,回调所处的背景是什么?它是如何工作的?
编辑:谢谢,我看到......还有一个问题,事件循环如何"记住"回调的范围?
这是我上一期提问的后续问题.
我是一个使用JavaScript的新人prototype,很抱歉第二篇文章.
我想点击的元素分配id给this.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中定义了一个" 类 ".
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)