5
回答
js的this的绑定
终于搞明白,存储TCO原来是这样算的>>>   
类似ob.aa=function(fun){},这里的fun是一个函数参数,,,如果让fun函数作用域里的this变成ob,,,,,不能使用function(fun){this.xx=fun;this.xx()}这种方法,大家还有其他方法吗?
<无标签>
举报
gogojxj
发帖于3年前 5回/168阅
共有5个答案 最后回答: 3年前
var obj = {
  bb: 1,
  aa: function () {
    console.log(this);
    console.log(this.bb)
  }
}
obj.aa();



--- 共有 1 条评论 ---
gogojxj这个就是我写的啊,是说参数的this变成主函数的this! 3年前 回复

function that() {
	this.say = function() {
	   console.log(this.a);
	}
}
function me() {
this.a = 'hello';
}
var t = new that();
t.say();//undefined
t.say.call(new me());//hello



是说call和apply?

--- 共有 1 条评论 ---
gogojxj不是,this.say = function() { console.log(this.a); }也是我开始写的人为绑定 3年前 回复

我觉得bind是你想要的. 请搜索"js call apply bind".

ps: 似乎IE有版本不支持bind, 需要手动实现(也是基于call/appy实现的, 能搜到), 不确定, 注意一下.

给你写一段示范代码,使用call/apply指定调用者:

var obj = {
  bb: 1,
  aa: function (func) {
     func.call(this);
  }
}

function say(){
  console.log(this.bb);
}
obj.aa(say);

结果输出就是obj.b的值。

或者这样,使用bind将this绑定到指定的调用者:

var obj = {
  bb: 1,
  aa: function (func) {
     func();
  }
}

function say(){
  console.log(this.bb);
}
obj.aa(say.bind(obj));



--- 共有 3 条评论 ---
gogojxj回复 @yunfound : 谢谢,看了,不过好像机制不是这样的.我去原档看下. 3年前 回复
yunfound回复 @gogojxj : http://www.cnblogs.com/wangtao_20/archive/2011/01/01/1923918.html 这里有篇文章可以助你理解! 3年前 回复
gogojxj能告诉下call的机制吗,传入的主体对象是是给主体虚拟绑定了一个零食属性还是? 3年前 回复

引用来自“yunfound”的评论

给你写一段示范代码,使用call/apply指定调用者:

var obj = {
  bb: 1,
  aa: function (func) {
     func.call(this);
  }
}

function say(){
  console.log(this.bb);
}
obj.aa(say);

结果输出就是obj.b的值。

或者这样,使用bind将this绑定到指定的调用者:

var obj = {
  bb: 1,
  aa: function (func) {
     func();
  }
}

function say(){
  console.log(this.bb);
}
obj.aa(say.bind(obj));



嗯,就是
顶部