原型和原型链
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>原型链</title>
</head>
<body>
<script>
function Person(name, age, gender) {
this.name = name
this.age = age
this.gender = gender
// 直接将方法挂载到原型上 这样就不会每次生成一个对象都创建对应的方法
Person.prototype.sing = function() {
console.log(this.name + "会唱歌");
}
}
var ldh = new Person("刘德华", 58, "男");
ldh.sing()
var zxy = new Person("张学友", 59, "男");
zxy.sing()
// 每个构造函数都有一个原型对象
console.log(Person.prototype);
// 原型对象的构造函数指向构造函数
// console.log(Person.prototype.constructor === Person);
// 对象实例的.__proto__(对象原型)指向原型对象
// console.log(ldh.__proto__ === Person.prototype);
// console.log(ldh);
// console.log(zxy);
// 原型链
// 原型对象也是对象所以它也有.__proto__ 属性 以此类推这样一层一层的链式结构被称为原型链
let rock = Person.prototype;
while (rock.__proto__ !== null) {
console.log((rock.__proto__));
rock = rock.__proto__
}
</script>
</body>
</html>