一、构造属性
所有原型对象自动获得一个名为constructor的属性,指回相关联的构造函数
function Person(name,age){
this.name = name
this.age = age
}
var p = new Person("cheng",20)
console.log(p.constructor);
console.log(p.constructor == Person); // true
var arr = [1,2,3]
console.log(arr.constructor == Array); // true
二、给原型添加属性(直接量形式)
function Person(name,age){
this.name=name;
this.age=age
}
// 以(字面量)对象的形式给原型对象添加属性
Person.prototype={
sayName:function(){
console.log(this.name)
},
sayAge:function(){
console.log(this.age)
}
}
// 问题:就是我们以直接量(对象)的形式,给原型对象添加属性的时候,它的constructor会指向object
var p=new Person("xuan",18)
console.log(p) // Person {name: "xuan", age: 18}
console.log(p.constructor==Person) //false
问题:就是我们以直接量(对象)的形式,给原型对象添加属性的时候,它的constructor会指向object
三、重置
function Person(name,age){
this.name=name;
this.age=age
}
// 以(字面量)对象的形式给原型对象添加属性
Person.prototype={
// 重置constructor属性
constructor:Person,
sayName:function(){
console.log(this.name)
},
sayAge:function(){
console.log(this.age)
}
}
// 问题:就是我们以直接量(对象)的形式,给原型对象添加属性的时候,它的constructor会指向object
// 所以就需要重置constructor属性
var p=new Person("xuan",18)
console.log(p) // Person {name: "xuan", age: 18}
console.log(p.constructor==Person) //true
重置constructor属性
四、公有属性和私有属性
- 公有属性在原型对象上
- 私有属性 通过this关键字添加的
hasOwnProperty 判断属性是私有还是公有的
function Person(name, age) {
this.name = name;
this.age = age
}
// 以(字面量)对象的形式给原型对象添加属性
Person.prototype = {
// 重置constructor属性
constructor: Person,
sayName: function () {
console.log(this.name)
},
sayAge: function () {
console.log(this.age)
}
}
var p = new Person("xuan", 18)
// 公有属性在原型对象上
// 私有属性 通过this关键字添加的
// hasOwnProperty 判断属性是私有还是公有的
console.log(p.hasOwnProperty("name")) // true 私有的
console.log(p.hasOwnProperty("sayName")); // false 公有的