<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>原型</title>
</head>
<body>
<script>
// 造明星
// 通过构造函数 添加明星的属性
function CreateStar(name, age) {
// 私有
this.name = name;
this.age = age;
// this.getName = function() {}
this.fans = 1;
this.fans2 = function() {}
}
// 通过原型(链)添加共享属性和方法 公共
CreateStar.prototype.desc = "这是一个共享的属性, 不会因为实例化不同的对象而不同";
CreateStar.prototype.getName = function() {
return '明星' + this.name + '被孵化出来了';
}
CreateStar.prototype.getAge = function() {
return '明星' + this.name + '已经' + this.age +'岁了';
}
// 实例化一个明星
var ldh = new CreateStar('刘德华', 57);
var rdh = new CreateStar('任达华', 57);
console.log(ldh === rdh); // false
console.log(ldh.prototype === rdh.prototype); // true
console.log(ldh.getName === rdh.getName); // true, 不管构造函数实例化多少个对象,他们调用的getName he getAge 都是同一个
console.log('年龄', ldh.age === rdh.age); // true
console.log('私有1', ldh.fans == rdh.fans); // false
console.log('私有2', ldh.fans === rdh.fans); // false
// fans方法相当于是私有的,每次实例化对象都会重新创建,所以每个fans的存储地址也都不同
</script>
</body>
</html>
上述运行结果: