Skip to content
快看这页儿写了啥...

如果一个构造函数 bind 一个对象,用此构造函数创建出的实例会继承这个对象的属性吗?为什么?

题干

  • bind

  • 构造函数 bind 后创建实例

题解

如果一个构造函数使用 bind 方法绑定了一个对象,用该构造函数创建的实例不会继承这个对象的属性。这是因为 bind 方法只会创建一个新的函数,而不会影响原始构造函数的原型链。

当使用 bind 方法绑定一个对象时,实际上是创建了一个新的函数,并将该函数的 this 值绑定到指定的对象。这个新函数与原始的构造函数没有直接的关系,它只是在调用时使用指定的对象作为上下文。

继承是通过原型链来实现的,子对象的原型通常指向父对象的实例或原型对象。但是,使用 bind 方法绑定对象并不会改变原始构造函数的原型链,因此无法实现属性的继承。

🌰:

javascript
function Person(name) {
  this.name = name;
}

const obj = { age: 25 };
const BoundPerson = Person.bind(obj);

const person = new BoundPerson('Alice');
console.log(person.name); // 输出:Alice
console.log(person.age); // 输出:undefined

在上例中,BoundPerson 是通过将 Person 构造函数绑定到 obj 对象而创建的新函数。当使用 BoundPerson 构造函数创建实例 person 时,实例只会继承 Person 构造函数原型上的属性和方法,而不会继承 obj 对象的属性。

相关

什么是原型、原型链

prototype 和 proto 区别

什么是继承、JS 有哪些继承方式

JS 实现 bind 方法

贡献者

isboyjc's avatar isboyjc

浏览量(PV)  次  ·  独立访客(UV)  人次
不正经的前端 | 八股 · 欢迎 star ⭐