0

関数をバインドしようとしましたが、その機能がよくわかりません。たとえば

   q={};
   q.e=function(){return 1;}
   q.e.i=function(){alert(this);}
   q.e().i(); //Nothing happend I excepted that it will alert 1

それで、それはどのように機能しますか?

ありがとうございました。

4

2 に答える 2

2

関数は、JavascriptのObjectからも継承します。したがって、関数オブジェクトにプロパティを割り当てることができます。これは、を呼び出すだけで実行できます。

q.e.i = function() {};

しかし、それだけです。それを呼び出したい場合は、同じセマンティクスを実行する必要があります

q.e.i();

.i()現在のスニペットでは、の戻り値で実行しようとしています。e()これはたまたま数値1です。

于 2012-12-07T00:12:57.500 に答える
1

Numberオブジェクトにはメソッドがないため、q.e().i(); q.e() == 1呼び出すときにエラーが発生するはずです。(1).i()i

コードが意味をなさないので助けるのは難しい。私はあなたが期待したことは私の頭の中で意味をなさないと言うことができるだけです:)

これがあなたが期待することをするいくつかのコードです

var q = {};
q.e = function() { return 1; };

q.e.i = function() { alert(this); }

// Call q.e.i, specifying what to use as this
q.e.i.call(q.e());

秘訣は、JSではthis、関数の呼び出し方法に応じて変化することです。

function a() {
  console.log(this);
}

var obj = {
   method: a
};

// Outputs the window object, calling a function without a `.` passes    
// The window object as `this`
a();
// Outputs the obj, when you say obj.method(), method is called with obj as `this`
obj.method();
// You can also force the this parameter (to the number 1 in this case)
// outputs 1
obj.method.call(1); 
于 2012-12-07T00:16:39.997 に答える