如何向内扩展此范围?我想重新分配一个更高范围的变量就可以解决问题......我做错了什么? 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();
});
答案 0 :(得分:4)
在您的代码中,configs
不是正在创建的Player
对象的公共成员。你没有var
声明它,所以它是一个全局变量。
configs = $.extend(this.opts, configs);
应该是:
this.configs = $.extend(this.opts, configs);
然后在您的init()
中,您可以the.configs.playerID
。
示例: http://jsfiddle.net/rCuXa/
(你的jsFiddle也加载了MooTools而不是jQuery。检查左边的菜单。)
编辑:
顺便说一下,由于您是从新init()
对象的上下文中调用Player
,因此您实际上不需要使用the
作为对象的引用this
。
在init
方法内,this
指的是您以此方式调用时创建的Player
。
var $player = $("#" + this.configs.playerID);
示例: http://jsfiddle.net/rCuXa/1/
EDIT2: 此外,如果始终要从您创建的init()
实例的上下文中调用Player
,您可能需要考虑放置它在prototype
的{{1}}对象上。
这样它将在所有实例之间共享,而不是为每个实例重新创建:
Player
答案 1 :(得分:0)
你这里只有一个小错误。你将扩展分配给配置,这不是在这个,但是你稍后通过'the'引用它,就好像它一样。这有效:
function Player(configs) {
this.opts = {
playerID: "cSurf"
};
this.configs = $.extend(this.opts, configs);
var the = this;
this.init = function(){
var $player = $("#" + the.configs.playerID);
alert($player.attr("id"));
}
}
var cSurf = new Player();
cSurf.init();