2011-05-13 85 views
0

如何製作多維物體?多維物體

function tst(){ 
    this.a = function(){ 
     alert(this.b.abc.c()); 
    }; 

    this.b = function(){ 

    }; 
} 
var obj = new tst(); 
obj.b.abc = function(){ 
    this.c = function(){ 
     return 'hello world'; 
    }; 
}; 

obj.a(); 
+1

...取決於你如何調用'abc'功能... – 2011-05-13 17:30:35

+0

已經編輯我的問題。如果你想從它本身調用它,該怎麼辦? – clarkk 2011-05-13 17:50:49

+0

@sime那你怎麼稱呼它呢? – clarkk 2011-05-13 18:11:16

回答

0

問題是與此代碼:

obj.b.abc = function(){ 
    this.c = function(){ 
     return 'hello world'; 
    }; 
}; 

調用abc功能創建obj.b.abc.c函數,但是有一個obj.b.c函數。因此,this.b.abc.c()會拋出錯誤,因爲這樣的函數不存在。


這將使其工作:

function tst() { 
    this.a = function() { 
     alert(this.b.abc.c()); 
    }; 

    this.b = function() { 

    }; 
} 

var obj = new tst(); 

obj.b.abc = function() { 
    this.abc.c = function() { // <--- NEW 
     return 'hello world'; 
    }; 
}; 

obj.b.abc(); // <--- NEW 
obj.a(); 

現場演示:http://jsfiddle.net/vgpNU/

+0

你怎麼能避免寫this.abc而是這個? – clarkk 2011-05-13 18:22:27

+0

@clarkk你可以使用'arguments.callee'來引用'abc':'arguments.callee.c = function(){...'。在這裏看到:http://jsfiddle.net/vgpNU/1/不過,我不知道,如果使用'arguments.callee'將是一個不錯的主意... – 2011-05-13 18:31:28

+0

或者是不好的做法,這樣做 – clarkk 2011-05-13 18:32:03

0

似乎在這裏工作的罰款:

http://jsfiddle.net/maniator/e3pfu/

function tst(){ 
    this.a = function(){ 

    }; 

    this.b = function(){ 

    }; 
} 
var obj = new tst(); 
obj.b.abc = function(){ 
    alert(this); 

    this.c = function(){ 

    }; 
}; 

obj.b.abc();