Object.setPrototypeOf()
方法将指定对象的原型(即内部 [[Prototype]] 属性)设置为另一个对象或 null。
所有 JavaScript 对象都从原型继承属性和方法。它通常被认为是设置对象原型的正确方法。
语法:
Object.setPrototypeOf(obj, prototype)
参数:
obj:要设置原型的对象。
prototype:它是对象的新原型(一个对象或null)。
返回值:
此方法返回指定的对象。
浏览器支持:
chrome | 34 |
edge | 是的 |
firefox | 31 |
opera | 是的 |
示例1
<script>
let raay = {
drive() {
return 'Add raay';
}
}
let naty = {
net() {
return 'use net';
}
}
// 设置
Object.setPrototypeOf(naty, raay);
console.dir(naty); //打印naty 对象
console.log(naty.net()); // 调用 net 方法
console.log(naty.drive()); // Add raay
</script>
输出:
[object Object] {
drive: drive() {
return 'Add raay';
},
net: net() {
return 'use net';
}
}
"use net"
"Add raay"
drive: drive() {
return 'Add raay';
},
net: net() {
return 'use net';
}
}
"use net"
"Add raay"
示例 2
<script>
var Animal = {
speak() {
console.log(this.name + ' makes');
}
};
class Dog {
constructor(name) {
this.name = name;
}
}
Object.setPrototypeOf(Dog.prototype, Animal);
// 如果你不这样做,当你调用speak时,你会得到一个TypeError
var d = new Dog('people');
d.speak();
</script>
输出:
"people makes"
示例3
<script>
let toyota = {
drive() {
return 'driving toyota';
}
}
let camry = {
wifi() {
return 'carry';
}
}
// 设置
Object.setPrototypeOf(camry, toyota);
console.dir(camry); //输出 camry 对象
console.log(camry.wifi()); // carry
</script>
输出:
[object Object] {
drive: drive() {
return 'driving toyota';
},
wifi: wifi() {
return 'carry';
}
}
"carry"
drive: drive() {
return 'driving toyota';
},
wifi: wifi() {
return 'carry';
}
}
"carry"