Javascript 对象 setPrototypeOf() 方法
Object.setPrototypeOf()
方法将指定对象的原型设置为另一个对象或 null
。
示例
// 创建一个空对象
const obj = {};
// 创建一个非空的对象 parent
const parent = { foo: "bar" };
// 将 parent 设置为 obj 的原型
Object.setPrototypeOf(obj, parent);
// 使用 obj 对象打印 parent 的 foo 属性
console.log(obj.foo);
// 输出:"bar"
setPrototypeOf() 语法
setPrototypeOf()
方法的语法为:
Object.setPrototypeOf(obj, prototype);
作为静态方法的 setPrototypeOf()
,需要使用 Object
类名来调用。
setPrototypeOf() 参数
setPrototypeOf()
方法接受以下参数:
- obj - 我们想要设置原型的对象。
- prototype - 对象的新原型(一个对象或 null)。
setPrototypeOf() 返回值
setPrototypeOf()
方法返回我们想要设置原型的对象,即 obj。
注意: 在每个浏览器和 JavaScript 引擎中,改变对象的 [[Prototype]]
当前都是一个非常慢的操作。
示例 1:JavaScript Object.setPrototypeOf()
// 创建要设置为原型的对象
let Animal = {
makeSound() {
console.log(`${this.name}, ${this.sound}!`);
},
};
// 定义 Dog 对象的构造函数
function Dog(name) {
this.name = name;
this.sound = "bark";
// 将 Dog 对象的原型设置为 Animal
Object.setPrototypeOf(this, Animal);
}
// 使用 Dog() 构造函数创建 dog1 对象
dog1 = new Dog("Marcus");
// 调用 Animal 的 makeSound() 方法
dog1.makeSound();
// 输出:Marcus, bark!
在上述示例中,使用 Object.setPrototypeOf()
方法将 Animal 对象设置为 dog1 对象的原型。
因此,我们可以使用 dog1 对象访问 Animal 的 makeSound()
方法,即使它没有在 Dog()
构造函数内定义。
示例 2:在类中使用 setPrototypeOf()
// 创建要设置为原型的对象
let Animal = {
makeSound() {
console.log(`${this.name}, ${this.sound}!`);
},
};
// 创建 Dog 类
class Dog {
constructor(name) {
this.name = name;
this.sound = "bark";
}
}
// Dog 是一个类,所以
// Dog.prototype 是一个对象
Object.setPrototypeOf(Dog.prototype, Animal);
// 创建 Dog 类的一个对象
let dog1 = new Dog("Marcus");
// 打印 dog1 的属性
console.log(dog1);
// 输出:{ name: 'Marcus', sound: 'bark' }
// 调用 Animal 的 makeSound() 方法
dog1.makeSound();
// 输出:Marcus, bark!
在上述示例中,setPrototypeOf()
方法用于将 Dog 类对象的原型设置为 Animal 对象。
结果,Dog 类的所有实例(在我们的例子中是 dog1)都可以继承并调用 Animal 对象的 makeSound()
方法。
推荐阅读: