bind返回函数被当成构造函数的情况
在MDN中有这么一句话
1 2
| bind()中的第一个参数:调用绑定函数时作为 this 参数传递给目标函数的值。 如果使用new运算符构造绑定函数,则忽略该值
|
那么这句话啥意思呢??
首先,我们都知道bind()会返回一个新的函数,如果这个返回的新的函数作为构造函数创建一个新的对象,那么此时this不再指向传入给bind的第一个参数,而是指向用new创建的实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| function func (name) { console.log(this); this.name = name } func.prototype.hello = function () { console.log(this.name); } let obj = { a: 1, say: function () { console.log('say'); } } let newObj = func.bind(obj) newObj()
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| function func (name) { console.log(this); this.name = name } func.prototype.hello = function () { console.log(this.name); } let obj = { a: 1, say: function () { console.log('say'); } } let newObj = func.bind(obj)
let o = new newObj('seven')
console.log('o', o);
o.hello()
|