gpt4 book ai didi

javascript - 将 "this"的范围携带到内部函数中

转载 作者:行者123 更新时间:2023-11-30 10:51:15 26 4
gpt4 key购买 nike

如何向内扩展这个范围?我认为重新分配一个更高范围的变量可以解决问题......我做错了什么? http://jsfiddle.net/8bqXM/

function Player(configs) {

this.opts = {
playerID: "cSurf"
};
configs = $.extend(this.opts, configs);

var the = this;

this.init = function(){
var $player = $("#" + the.configs.playerID);
alert($player.attr("id"));
}
}
var cSurf = new Player();
$(document).ready(function(){
cSurf.init();
});

最佳答案

在您的代码中,configs 不是正在创建的 Player 对象的公共(public)成员。您声明它时没有使用 var,因此它是一个全局变量。

configs = $.extend(this.opts, configs);

应该是:

this.configs = $.extend(this.opts, configs);

然后在您的 init() 中,您可以执行 the.configs.playerID

示例: http://jsfiddle.net/rCuXa/

(您的 jsFiddle 还加载了 MooTools 而不是 jQuery。检查左侧的菜单。)


编辑:

顺便说一句,因为您是从新的 Player 对象的上下文中调用 init(),所以您真的不需要使用 the 作为对 this 的引用。

init 方法中,this 指的是当您以这种方式调用它时创建的 Player

var $player = $("#" + this.configs.playerID);

示例: http://jsfiddle.net/rCuXa/1/


EDIT2: 此外,如果 init() 总是从您创建的 Player 实例的上下文中调用,您可能需要考虑将其放置在 Playerprototype 对象上。

这样它将在所有实例之间共享,而不是为每个实例重新创建:

Player.prototype.init = function(){
// ---------v----------"this" is the instance of Player
var $player = $("#" + this.configs.playerID);
alert($player.attr("id"));
}

示例: http://jsfiddle.net/rCuXa/2/

关于javascript - 将 "this"的范围携带到内部函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5174772/

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