为什么我不能这样做?
var MyObject = {}
MyObject.foo = function(){
this.sayhello = function(){
alert('Hello');
}
}
MyObject.foo.sayhello();
关于如何做到的任何想法?
答案 0 :(得分:6)
在foo
内,this
引用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();
答案 1 :(得分:1)
您必须先调用MyObject.foo()
,以便实际添加this.sayhello
函数。然后你应该打电话给MyObject.foo.sayhello();
答案 2 :(得分:0)
var MyObject = {}
MyObject.foo = {
sayhello: function(){
alert('Hello');
}
}
MyObject.foo.sayhello();
答案 3 :(得分:0)
那是因为该功能尚不存在。因此,您必须先调用foo。你所做的是从属性foo调用函数sayhello。但是你没有属性foo。你有一个函数foo。
但你也可以做到这一点并使其链接,就像jQuery那样:
var MyObject = {}
MyObject.foo = function(){
this.sayhello = function(){
alert('Hello');
}
return this;
}
MyObject.foo().sayhello();
在对象foo中创建一个函数sayhello,所以不是链式函数。但是具有函数的对象内的对象。
var MyObject = {
foo : {
sayhello : function(){
alert("hello");
}
}
}
MyObject.foo.sayhello(); // Now does work!