super可以调用父亲的方法
let name='zfpx';
let age= 9;
//如果对象的属性名和变量名如果一样的话可以二合一
let obj = {name,age};
//console.log(obj);
let obj1 = {age:1,getFood(){
return '面包';
}};
let obj3 = {
__proto__:obj1,
getFood(){
//super可以调用父亲的方法
return '牛奶'+super.getFood();
}
};
Object.setPrototypeOf() 方法设置一个指定的对象的原型 ( 即, 内部[[Prototype]]属性)到另一个对象或 null
//设置obj3的原型为obj1
Object.setPrototypeOf(obj3,obj1);
/*obj3.__proto__ = obj1;*/
console.log(obj3.getFood());
//super
类
ES6里类里可以定义构造函数,当创建一个类的实例的时候就会调用构造函数
class Parent{
constructor(name){
this.name = name;//实例的私有属性
}
//静态属性是类的属性
static hello(){
console.log('hello');
}
//属于实例的公有属性,也就是相当于原型上的属性
getName(){
console.log(this.name);
}
}
class Child extends Parent{
constructor(name,age){
//super指的是父类的构造函数
super(name);
this.age = age;
}
getAge(){
console.log(this.age);
}
}
静态属性是类的属性,不需要实例就可以调用
static hello(){
console.log('hello');
}
Object.create()
Object.create = function(prototype){
//先创建一个空的函数
function Fn(){};
Fn.prototype = prototype;
//返回这个函数的实例
return new Fn();//__proto__
}
一个属性如果放在原型上的话,是可能通过实例来调用的
但是放在类上的,不能通过实例来调用,只能用过类名来调用