将函数绑定到对象中的另一个函数

时间:2012-12-07 00:10:51

标签: javascript oop function

我尝试绑定一个函数,但我真的不知道它是如何工作的 例如

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

那它是如何运作的?

谢谢。

2 个答案:

答案 0 :(得分:2)

一个函数也在Javascript中继承 Object 继承。因此,您可以将属性分配给功能对象,您只需通过调用

进行操作
q.e.i = function() {};

但就是这样。如果你想调用它,你需要相同的语义

q.e.i();

在您当前的代码段中,您尝试在.i()返回值上执行e(),这恰好是数字1。< / p>

答案 1 :(得分:1)

调用q.e().i(); q.e() == 1时应该收到错误,因此(1).i()是错误,因为Number对象没有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);