0

このようなオブジェクト内の関数にアクセスしたい

    function MyObject()
    {
        this.create = function(array)
        {
             var myArray = array;
             this.arrayLength = function(){return myArray.length;}

             // Do something else here...
        }
    }
    var foo = new MyObject();
    foo.create(value);
    console.log(foo.create.arrayLength(););

.create.length() の応答として undefined になりますが、そのようにすることは可能ですか?

4

5 に答える 5

4

.create()でメソッドを呼び出すとfoo.create()、その中に.create() thisfoo. したがって、この行:

this.arrayLength = function(){return myArray.length;}

にメソッドarrayLength()を作成しfooます。したがって、次を使用してください:

console.log(foo.arrayLength());

何らかの理由で実際にarrayLength()メソッドになりたい場合は、次のようにcreateすることができます。

this.create.arrayLength = function(){return myArray.length;}

そして、あなたのオリジナルを使用してください:

console.log(foo.create.arrayLength());

(閉じ括弧の前にあった余分なセミコロンを引いたもの)。

しかし、後者のバージョンは「動作」しますが、奇妙な方法のように思えます。

于 2013-08-08T12:11:20.923 に答える
1

の :

this.create = function(array)
{
     var myArray = array;
     this.arrayLength = function(){return myArray.length;}
}

thisのインスタンスを参照する代わりにusingをfoo呼び出しているため、を参照します。つまり、これは function のプロパティではないため、この方法で呼び出すことはできません。createsomething.create()new MyObject.create()thiscreatearrayLengthcreate

var foo = new (new MyObject).create();
console.log(foo.create.arrayLength(););

ただし、動作します。

あなたが何をしたいのかを私たちに教えてくれれば、私たちはきっともっと変な方法を考えるでしょう.

于 2013-08-08T12:07:31.367 に答える
0

問題が何であるかについては、かなりよく説明されていました。

それを修正するには、arrayLength メソッドを定義する行を変更するだけです。

この行を変更します。this.arrayLength = func...

これに:this.create.arrayLength = func...

于 2013-08-08T12:22:03.907 に答える