gpt4 book ai didi

Javascript OOP - 从子类中的闭包访问继承的属性或函数

转载 作者:行者123 更新时间:2023-11-30 13:35:17 25 4
gpt4 key购买 nike

我正在使用此处提供的 javascript 继承助手:http://ejohn.org/blog/simple-javascript-inheritance/

我有以下代码,但我无法从子类中的闭包访问继承的属性或函数,如下所示。我是 OOP javascript 代码的新手,感谢您的建议。我想在闭包中,上下文更改为 JQuery(此变量)因此出现了问题。感谢您的评论。

谢谢,-A

附言 - 使用 JQuery 1.5

     var Users = Class.extend({
init: function(names){this.names = names;}
});
var HomeUsers = Users.extend({
work:function(){
// alert(this.names.length); // PRINTS A
// var names = this.names; // If I make a local alias it works
$.map([1,2,3],function(){
var newName = this.names.length; //error this.names is not defined.
alert(newName);
});

}
});

var users = new HomeUsers(["A"]);
users.work();

最佳答案

this 在内部函数中

    function(){
var newName = this.names.length;
alert(newName);
}

与外层函数中的this不一样。

work: function(){ 
$.map([1,2,3],function(){
var newName = this.names.length;
alert(newName);
});
}

人们可以通过多种方式解决这个问题:

将对外部函数的 this 的引用存储为另一个变量

work: function(){ 
var that = this;
$.map([1,2,3],function(){
var newName = that.names.length;
alert(newName);
});
}

如您所见,使用的是 that 而不是 this

使用 jQuery 的 $.proxy

work: function(){ 
$.map([1,2,3],$.proxy(function(){
var newName = this.names.length;
alert(newName);
}, this));
}

$.proxy 所做的是创建另一个调用您传入的函数(在本例中为内部函数)的函数,但显式设置函数的上下文(this ) 到第二个参数。

使用Function.prototype.bind

work: function(){ 
$.map([1,2,3],function(){
var newName = this.names.length;
alert(newName);
}.bind(this));
}

它的工作方式与 jQuery 的 $.proxy 类似,但在这一个中,您调用了函数的 bind 方法。

并非所有浏览器都支持它,但有一个 JavaScript implementation of Function.prototype.bind在 MDC 上。你可以使用它。

this 是一个令人困惑的关键字,如果您想了解更多关于 this 的信息,请查看 this .

关于Javascript OOP - 从子类中的闭包访问继承的属性或函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5125622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com