扫码关注官方订阅号
call 和 apply的普通显示绑定为何说还是会丢失绑定,而bind不会?
认证高级PHP讲师
我认为.call(obj) 和 .apply 是这样的。找到方法。把方法的this指向传进去的对象obj。执行。
.bind更像是。找到方法然后返回一个 function.call(obj)这样的东西
举例子就是
function demo(){ console.log(this.x); } window.x = "window"; demo();// demo.call({x:"call"});// demo.apply({x:"apply"});// demo.bind({x:"bind"}); //function LNBind(fun,obj){return function(){fun.call(obj)}}; //LNBind(demo,{x:"LNBind"})(); //本来想写一个仿原生的,但是居然写不出来了。。。我在想想,回来补坑 //从网上搜索了一个,原理和我的一样。只不过不知道为什么我用obj写的时候没出来 1 if (!Function.prototype.bind) { 2 Function.prototype.bind = function (oThis) { 3 if (typeof this !== "function") { 4 // closest thing possible to the ECMAScript 5 internal IsCallable function 5 throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); 6 } 7 8 var aArgs = Array.prototype.slice.call(arguments, 1), 9 fToBind = this, 10 fNOP = function () {}, 11 fBound = function () { 12 return fToBind.apply(this instanceof fNOP && oThis 13 ? this 14 : oThis || window, 15 aArgs.concat(Array.prototype.slice.call(arguments))); 16 }; 17 18 fNOP.prototype = this.prototype; 19 fBound.prototype = new fNOP(); 20 21 return fBound; 22 }; 23 } //来源 http://www.cnblogs.com/admos/p/4455922.html
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
我认为.call(obj) 和 .apply 是这样的。找到方法。把方法的this指向传进去的对象obj。执行。
.bind更像是。找到方法然后返回一个 function.call(obj)这样的东西
举例子就是