一张图,一份代码,理解原型链
微信图片_20200919160654.png
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
//构造函数写属性,原型对象写方法
function Animal(name,age) {
this.name=name||'小花';
this.age=age||14;
}
Animal.prototype.say=function() {
console.log(this.name+'它今年'+this.age+'岁了');
}
let [name,age]=['小狗',5];
var dog=new Animal(...[name,age]);
var cat=new Animal('小猫',4)
dog.say(); //小狗它今年5岁了
cat.say(); //小猫它今年4岁了
//实例化对象的原型指向该构造函数的原型对象
console.log(dog.__proto__===Animal.prototype); // true
//构造函数的原型对象内部有一个constructor指针,指向构造函数本身
console.log(Animal.prototype.constructor===Animal); // true
//Function是由function关键字定义的函数对象的原型
console.log(Animal.__proto__===Function.prototype); // true
//Function也是一个构造函数 -->构造函数的原型对象内部有一个constructor指针,指向构造函数本身
console.log(Function.prototype.constructor===Function) //true
console.log(Function.prototype.__proto__===Object.prototype) //true
console.log(Animal.prototype.__proto__===Object.prototype) //true
console.log(Object.prototype.__proto__)//null
console.log(Object.__proto__===Function.prototype) //true
console.log(Animal.prototype==Function.prototype) //false
console.log(Animal.__proto__===Object.__proto__) //true
</script>
</body>
</html>
网友评论