Javascript对象方法

xav*_*vip 3 javascript

为什么我不能这样做?

var MyObject = {}
MyObject.foo = function(){
  this.sayhello = function(){
    alert('Hello');
  }
}
MyObject.foo.sayhello();
Run Code Online (Sandbox Code Playgroud)

关于如何做到的任何想法?

zzz*_*Bov 6

在内foo,this引用MyObject,这意味着之后:

MyObject.foo();
Run Code Online (Sandbox Code Playgroud)

你可以打电话:

MyObject.sayhello();
Run Code Online (Sandbox Code Playgroud)

如果你想能够打电话MyObject.foo.sayhello(),你需要sayhello成为一个函数MyObject.foo:

var MyObject = {}
MyObject.foo = function () {...};
MyObject.foo.sayhello = function () {
    alert('hello');
}
Run Code Online (Sandbox Code Playgroud)

如果您不需要foo也是一个函数,您可以简单地声明:

var MyObject = {
    foo: {
        sayhello: function () {
            alert('Hello');
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将允许你打电话:

MyObject.foo.sayhello();
Run Code Online (Sandbox Code Playgroud)