var one = {
name:"object",
say:function(greet) {
return greet + ","+this.name;
}
}
//console.log(one.say("hi")); //结果hi,object
var two = {
name:"another"
};
console.log(one.say.apply(two,["hello"])); //结果hello,another

借用say()方法内部的this指向了two对象。

但是在如果将函数指针复制给一个全局变量,或者将该函数作为回调函数来传递,整个代码就可能不会像预期那样运行。如下:

//给变量赋值,“this”将会指向全局变量
var say = one.say;
console.log(say("you")); //结果you,undefined //作为回调函数使用
var yetanother = {
name:"yet",
method:function(callback){
return callback("HOHO");
}
}
console.log(yetanother.method(one.say));//结果HOHO,undefined

这时候可以使用下面一个函数来解决

function bind(o,m){
return function(){
return m.apply(o,[].slice.call(arguments));
}
}

可以使用上面的函数绑定对象和需要借用的方法。

var twoSay = bind(two,one.say);
console.log(twoSay("jie")); //jie,another

最新文章

  1. JavaScript Arguments.callee解释
  2. 使用对话框 —— Dialog
  3. Trading
  4. PADS从原理图到PCB整体简易流程
  5. springMvc静态资源拦截问题
  6. Uva11538 排列组合水题
  7. KeyValuePair
  8. iOS 自动布局详细介绍
  9. Java for LeetCode 054 Spiral Matrix
  10. 用NPOI导出Excel
  11. mysql笔记之集群
  12. HDU 5933 ArcSoft's Office Rearrangement 【模拟】(2016年中国大学生程序设计竞赛(杭州))
  13. SQL语句中的DQL、DML、DCL、DDL、CCL、TPL
  14. java--Object类接受任意引用数据类型对象
  15. 02、NetCore2.0优化之Nuget包
  16. EF_简单的增删改查
  17. EF CRUD
  18. saltstack SLS
  19. HTML中的锚点设置和table格式
  20. 记录Activity启动时间 ActivityLifecycleCallbacks

热门文章

  1. 3月25日html(六) Javascrip
  2. Python 使用for代替in判断一个元素属于某个集合
  3. android开发基本流程
  4. Windows7下移植Qt4.8.4项目到QT5.2上时遇到的一些问题(包括三篇参考文章)
  5. zabbix 对于logstash告警连续发邮件
  6. 转:String.Empty、string=”” 和null的区别
  7. 【转】解决java.lang.IllegalStateException: The content of the adapter has changed but ListView...的问题
  8. 浅谈C++中指针和引用的区别者之间的区别和用法(转)
  9. python3-day4(递归)
  10. Linux文件系统的设计