在函数原型上添加属性方法
程序员文章站
2022-06-12 20:45:07
...
代码、总结的参考来源
——选自《JavaScript高级程序设计(第3版)》.
// code block
function person(){};
var person1 = new person();
方法一
每个属性或方法直接添加到原型对象上。
// code block
person.prototype.name = "Nicholas";
person.prototype.age = 29;
person.prototype.job = "softWare Engineer";
person.prototype.sayName = function(){
console.log(this.name)
};
用instanceof操作符测试Object、Person返回true,constructor属性正常指向person。
- Object.keys 方法,接受一个对象作为参数,返回一个包含所有可枚举属性的字符串数组。
- Object.getOwnPropertyNames 方法,接受一个对象作为参数,返回所有实例属性,无论它是否可枚举。
// code block
var keys = Object.keys(person.prototype) ;
console.log(keys) ; // ["name", "age", "job", "sayName"]
var getPropertys = Object.getOwnPropertyNames(person.prototype) ;
console.log(getPropertys ) ; // ["constructor", "name", "age", "job", "sayName"]
console.log(person1 instanceof Object) ; //true
console.log(person1 instanceof person) ; //true
console.log(person1.constructor == person) ; //true
console.log(person1.constructor == Object) ; //false
方法二
将原型对象设置为等于一个以对象字面量形式创建的新对象,该方法本质上重写了默认的prototype对象。
// code block
person.prototype = {
name: 'Nicolas',
age: 29,
job: 'sofyWare Engineer',
sayName: function(){
alert(this.name)
}
}
var keys = Object.keys(person.prototype) ;
console.log(keys) ; // ["name", "age", "job", "sayName"]
var getPropertys = Object.getOwnPropertyNames(person.prototype) ;
console.log(getPropertys ) ; // ["name", "age", "job", "sayName"]
console.log(person1 instanceof Object) ; //true
console.log(person1 instanceof person) ; //true
console.log(person1.constructor == person) ; //false
console.log(person1.constructor == Object) ; //true
这个方法有两个注意事项:
- 原型对象的constructor属性不再指向prototype属性所在函数,改为指向Object。
- 重设constructor属性指向prototype属性所在函数后,constructor属性的[[Enumerable]]特性设为了true。(默认情况下constructor属性不可枚举)
重设constructor属性为适当的值。
// code block
person.prototype = {
constructor: person,
name: 'Nicolas',
age: 29,
job: 'sofyWare Engineer',
sayName: function(){
alert(this.name)
}
}
var keys = Object.keys(person.prototype) ;
console.log(keys) ; // ["constructor", "name", "age", "job", "sayName"]
var getPropertys = Object.getOwnPropertyNames(person.prototype) ;
console.log(getPropertys ) ; // ["constructor", "name", "age", "job", "sayName"]
console.log(person1 instanceof Object) ; //true
console.log(person1 instanceof person) ; //true
console.log(person1.constructor == person) ; //true
console.log(person1.constructor == Object) ; //false
上一篇: JS高程读书笔记--第六章原型继承