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()恰好是 number 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 回答