js创建对象之原型模式3、更简洁的创建原型模式
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
//创建对象
//原型模式
//更简单的原型语法
//之前为原型添加属性都要写一遍prototype,麻烦,解决方法如下
function Person(){};
Person.prototype = {
name: "宝清老窖",
age: 30,
job: "Software",
sayName: function(){
console.log(this.name);
}
}
//简便了不少哈,但是constructor属性不再指向Person了,因为我们重写了prototype
//虽然instanceof还能返回正确的结果,但是constrctor已经无法确定对象的类型
var friend = new Person();
console.log(friend instanceof Object); //true
console.log(friend instanceof Person); //true
console.log(friend.constructor == Person); //false
console.log(friend.constructor == Object); //true
console.log('---------------------------------------------------');
//所以需要改造成下面的方式
function Person(){};
Person.prototype = {
constructor: Person,
name: "宝清老窖",
age: 30,
job: "Software",
sayName: function(){
console.log(this.name);
}
}
var friend = new Person();
console.log(friend instanceof Object); //true
console.log(friend instanceof Person); //true
console.log(friend.constructor == Person); //true
console.log(friend.constructor == Object); //false
//但是以这种方式的话,constructor的[[Enumerable]]为true
//所以得改成false
function Person(){};
Person.prototype = {
name: "宝清老窖",
age: 30,
job: "Software",
sayName: function(){
console.log(this.name);
}
}
Object.defineProperty(Person.prototype , 'constructor' , {
enumerable: false,
value: Person
})
//Object.keys(Person.prototype);为 ["name", "age", "job", "sayName"]
</script>
</body>
</html>
提取出js
//创建对象
//原型模式
//更简单的原型语法
//之前为原型添加属性都要写一遍prototype,麻烦,解决方法如下
function Person(){};
Person.prototype = {
name: "宝清老窖",
age: 30,
job: "Software",
sayName: function(){
console.log(this.name);
}
}
//简便了不少哈,但是constructor属性不再指向Person了,因为我们重写了prototype
//虽然instanceof还能返回正确的结果,但是constrctor已经无法确定对象的类型
var friend = new Person();
console.log(friend instanceof Object); //true
console.log(friend instanceof Person); //true
console.log(friend.constructor == Person); //false
console.log(friend.constructor == Object); //true
console.log('---------------------------------------------------');
//所以需要改造成下面的方式
function Person(){};
Person.prototype = {
constructor: Person,
name: "宝清老窖",
age: 30,
job: "Software",
sayName: function(){
console.log(this.name);
}
}
var friend = new Person();
console.log(friend instanceof Object); //true
console.log(friend instanceof Person); //true
console.log(friend.constructor == Person); //true
console.log(friend.constructor == Object); //false
//但是以这种方式的话,constructor的[[Enumerable]]为true
//所以得改成false
function Person(){};
Person.prototype = {
name: "宝清老窖",
age: 30,
job: "Software",
sayName: function(){
console.log(this.name);
}
}
Object.defineProperty(Person.prototype , 'constructor' , {
enumerable: false,
value: Person
})
//Object.keys(Person.prototype);为 ["name", "age", "job", "sayName"]
浙公网安备 33010602011771号