Javascript对象方法

时间:2013-02-06 18:45:00

标签: javascript

为什么我不能这样做?

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

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

4 个答案:

答案 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!