2013-02-06 122 views
3

爲什麼我不能這樣做?Javascript對象方法

var MyObject = {} 
MyObject.foo = function(){ 
    this.sayhello = function(){ 
    alert('Hello'); 
    } 
} 
MyObject.foo.sayhello(); 

有關如何完成的任何想法?

+0

可能重複(http://stackoverflow.com/questions/2326072/javascript-function-pointer-assignment) – atk

+0

http://stackoverflow.com/questions/2326072/ javascript-function-pointer-assignment – atk

+1

@atk,我不相信鏈接的問題與此處提到的內容有關。 – zzzzBov

回答

1

您必須先致電MyObject.foo(),以便實際添加this.sayhello函數。那麼你應該比布爾調用MyObject.foo.sayhello();

+2

這是錯誤的,您應該能夠調用'MyObject.sayhello()'而不是'MyObject.foo.sayhello()',因爲'this'引用了'MyObject'。 – zzzzBov

6

foothis引用MyObject,這意味着經過:

MyObject.foo(); 

您可以撥打:

MyObject.sayhello(); 

如果你想能夠調用MyObject.foo.sayhello() ,您需要sayhello作爲MyObject.foo的功能:

var MyObject = {} 
MyObject.foo = function() {...}; 
MyObject.foo.sayhello = function() { 
    alert('hello'); 
} 

如果您不需要foo也成爲一個功能,你可以簡單地聲明:

var MyObject = { 
    foo: { 
     sayhello: function() { 
      alert('Hello'); 
     } 
    } 
} 

這將允許您撥打:

MyObject.foo.sayhello(); 
+0

這是好的,但它不是由netbeans導航器映射......我必須在函數之間使用逗號 – xavip

+0

我還應該提到在'sayhello'函數中,'this'將引用'MyObject.foo'而不是'MyObject' 。 – zzzzBov

0
var MyObject = {} 
MyObject.foo = { 
    sayhello: function(){ 
    alert('Hello'); 
    } 
} 
MyObject.foo.sayhello(); 
0

這是因爲該功能尚不存在。因此,您必須先致電foo。你所做的就是從屬性foo調用函數sayhello。但你沒有財富富。你有一個函數foo。

但你也可以做到這一點,使它鏈,如jQuery做:

var MyObject = {} 
MyObject.foo = function(){ 
    this.sayhello = function(){ 
    alert('Hello'); 
    } 
    return this; 
} 
MyObject.foo().sayhello(); 

做一個函數裏面的SayHello對象foo,所以不是一個鏈接功能。但是具有函數的對象內的對象。

var MyObject = { 
    foo : { 
     sayhello : function(){ 
      alert("hello"); 
     } 
    } 
} 
MyObject.foo.sayhello(); // Now does work! 
[Javascript函數指針分配]的
+0

是的,但這意味着我必須在方法之間使用逗號,所以NetBeans導航器不會映射方法... – xavip