#markdown
构造函数是用于创建和初始化对象的特殊函数,通过new
关键字调用。每个函数在JavaScript中都可以作为构造函数使用,其prototype
属性决定了实例继承的属性和方法。
function Original() { this.a = 1 }
function NewConstructor() { this.b = 2 }
const obj = new Original();
obj.constructor = NewConstructor; // 修改实例的构造函数引用
注意:这不会改变实例的原型链,仅修改constructor
属性的指向。
function Parent() { this.x = 10 }
function Child() { this.y = 20 }
Child.prototype = new Parent(); // 原型链继承
Child.prototype.constructor = Child; // 修复constructor指向
function DynamicConstructor(type) {
if (type === 'A') {
this.value = 'TypeA';
} else {
this.value = 'Default';
}
}
instanceof
操作符的预期行为obj instanceof NewConstructor // false
原因:instanceof检查原型链而非constructor属性 解决:需同时修改原型链:
obj.__proto__ = NewConstructor.prototype;
class MyClass {}
MyClass = function() {} // 报错
解决:使用继承或工厂函数替代
没有搜到相关的文章