1、替换对象的原型
直接修改__proto__:xiaoLiang.__proto__ = maYun ,效率比较低
系统提供了专门替换对象原型的函数:setPrototypeOf( )
把参数1 的 proto 换成 参数2
setPrototypeOf(对象,原型):只会影响修改的对象,不会影响构造函数,之后创建的对象不会变更
function Liang(name, age) {
this.name = name;
this.age = age;
}
var xiaoLiang = new Liang("小亮", 12);
console.log(xiaoLiang);
var maYun = {
money: 99999999999,
houses: 100000000
}
//替换小亮的父亲为马云
//为对象替换原型,直接修改__proto__效率比较低
//xiaoLiang.__proto__ = maYun;
//推荐:系统提供了专门替换对象原型的函数:setPrototypeOf()
//把参数1 的 proto 换成 参数2
Object.setPrototypeOf(xiaoLiang, maYun);
console.log(xiaoLiang);
//如果通过构造函数再次创建对象,此对象的原型会变成马云吗? 不会
var xxLiang = new Liang("小小亮", 3);
console.log(xxLiang);
// setPrototypeOf(对象,原型):只会影响修改的对象,不会影响构造函数,之后创建的对象没有变更
2、替换构造的原型
构造函数原型变化,会影响所有生成的对象
//构造函数原型变化,会影响所有生成的对象
function Liang(name, age) {
this.name = name;
this.age = age;
}
Liang.prototype.firstname = "成";
Liang.prototype.intro = function () {
console.log(`大家好,我是${this.firstname+this.name}`);
}
//替换构造函数的prototype
Liang.prototype = {
firstname: "王",
intro: function () {
console.log(`${this.name}:我爸姓:${this.firstname}`);
}
}
var xiaoLiang = new Liang("小亮", 5);
xiaoLiang.intro();
var xxLiang = new Liang("小小亮", 2);
xxLiang.intro();