2011-03-02 24 views
1

如何擴展此範圍?我認爲重新分配一個更高範圍的變量會做伎倆......我做錯了什麼? http://jsfiddle.net/8bqXM/將「this」的範圍轉換爲內部函數

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(); 
}); 

回答

4

在你的代碼,configs是不是正在創建的Player對象的公共成員。你宣佈它沒有var,所以它是一個全局變量。

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

應該是:

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

然後在你的init()你可以做the.configs.playerID

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

(。你的jsfiddle也有加載,而不是jQuery的MooTools的檢查左側的菜單)


編輯:

順便說一句,因爲你打電話給init()新的Player對象的文本,你真的不需要使用the作爲參考this

Inside init method,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/

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();