3

なぜ私はこれを行うことができないのですか?

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

それをどのように行うことができるかについてのアイデアはありますか?

4

4 に答える 4

6

foothis参照MyObject、つまり、後:

MyObject.foo();

あなたは呼び出すことができます:

MyObject.sayhello();

を呼び出せるようにしたい場合は、 の関数であるMyObject.foo.sayhello()必要があります。sayhelloMyObject.foo

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

foo関数である必要がない場合は、次のように宣言するだけです。

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

これにより、次のように呼び出すことができます。

MyObject.foo.sayhello();
于 2013-02-06T18:46:25.460 に答える
1

関数が実際に追加さMyObject.foo()れるように、最初に呼び出す必要があります。this.sayhelloそれからあなたは電話することができるはずですMyObject.foo.sayhello();

于 2013-02-06T18:46:20.333 に答える
0
var MyObject = {}
MyObject.foo = {
  sayhello: function(){
    alert('Hello');
  }
}
MyObject.foo.sayhello();
于 2013-02-06T18:47:56.657 に答える
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!
于 2013-02-06T18:48:15.070 に答える