关于javascript中apply在实际项目中的实用性

最近一直在看关于apply的使用详解。
能劫持另外一个对象的方法,继承另外一个对象的属性.
但是总不会拓展到项目中进行使用。觉得对象这方面很模糊~
有大神可以详解下吗~

阅读 2.3k
2 个回答

一般造轮子的时候才会用到这些。
举个现实中的例子,我写了一个mvvm库,里面要实现一个view-viewModel绑定功能

<input type="text" sf-value="vm.getMessage()">

我需要给input个控件的value赋值,这个值的返回结果是vm.getMessage(),而我从DOM tree上只能获得"vm.getMessage()"这个字符串,我通过解析,拿到2部分,"vm"和"getMessage",我可以从之前维护的一个map里找到与"vm"这个字符串对应的viewModel实例,"getMessage"我能知道是个方法名,于是我就是调用apply来完成一些事情

var viewModel = viewModelMap["vm"];
var func = "getMessage";
var result = viewModel[func].apply(viewModel);
inputDOM.setAttribute("value",result);

比如所有p标签内容红色(只是举例)

   //先前试着不用jQuery写页面:
  var p=document.querySelectorAll('p')
  //直接p.forEach()  不兼容UC
  //Array.prototype.forEach.apply(p,[function(e){}])  显然call简洁点
   Array.prototype.forEach.call(p,function(e){e.style.color='red'})
  //使用jQuery:
  $('p').css('color','red')

感觉有的舍近求远?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题