对象新的方法(原型)
1、proto 指向原型对象,编码时性能较低下
console.log({a: 1});//打印出来的__proto__就是Object原型
2、Object.setPrototypeOf( 要修改的对象,想作为新的原型的对象) 修改对象的原型对象,
const obj1 = {
a: 1
};
const obj2 = {
b: 1
}
const obj = Object.create(obj1);//创建obj对象指定原型为obj1
console.log(obj.__proto__);//{a:1}
Object.setPrototypeOf(obj, obj2);
console.log(obj.__proto__);//{b:1}
3、Object.getPrototypeOf( 要读取的对象) 读取对象的原型对象,和直接去读取__proto__属性,是一样的。
const obj1 = {a: 1};
const obj = Object.create(obj1);
console.log(obj.__proto__);//{a:1}
console.log(Object.getPrototypeOf(obj));//{a:1}
console.log(obj.__proto__ === Object.getPrototypeOf(obj));//true
4、super:不是方法是关键字,指向的是当前对象(this指向的对象)的原型对象
获取原型对象上的属性和方法 只有使用对象的简洁表示法的时候才可以使用(:function(){ }与箭头函数都不可以)
const obj = {name: 'xiaoming'};
const cObj = {
say() {
console.log(`My name is ${super.name}`);
}
}
Object.setPrototypeOf(cObj, obj);
cObj.say();// My name is xiaoming