prototype为对象原型的意思,在JS中配置对象的prototype属性,可以减少js内存空间的占用,提高js的性能。
使用示例:
1、若设置 cat.age=3; 则只有猫这个实例的年龄为3。与其相似的还有对原型方法的重写,只有猫实例生效。
2、若设置 Animal.prototype.age=3; 则所有动物实例的年龄为3。与其相似的还有对原型方法的重写,所有动物实例都生效。
3、若设置 cat.style.push('吃饭'); 则所有动物的arr都会进行改变。(注意)
4、若想添加新的原型属性或方法,任意位置直接添加即可,但要注意其会对其它实例产生影响。
Object.prototype.property相较于Object.property的优点为:前者声明的属性或方法只创建一次,不会像后者随着每次实例的创建而创建,从而节省了大量js内存,提升了js的性能。
如果不想使用Object.prototype.property,也可以使用外部方法来实现Object.prototype.property的功能,如下所示:
备注:可以使用 object.hasOwnProperty(property); 来判断已知属性为该实例的私有属性还是原型属性。
所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。
使用示例:
function Animal(name){
this.name=name;
}
Animal.prototype.style=['毛色','几条腿'];
Animal.prototype.age=1;
Animal.prototype.show=function(){
console.log("我是:"+this.name+",今年"+this.age+"岁,我有以下特点:"); //引用时,无论是否为原型变量,
for(var index in this.style){ //都要为this.property
console.log(this.style[index]);
}
}
//创建实例
var dog=new Animal('狗');
var cat=new Animal('猫');
dog.show();
cat.show();
备注:1、若设置 cat.age=3; 则只有猫这个实例的年龄为3。与其相似的还有对原型方法的重写,只有猫实例生效。
2、若设置 Animal.prototype.age=3; 则所有动物实例的年龄为3。与其相似的还有对原型方法的重写,所有动物实例都生效。
3、若设置 cat.style.push('吃饭'); 则所有动物的arr都会进行改变。(注意)
4、若想添加新的原型属性或方法,任意位置直接添加即可,但要注意其会对其它实例产生影响。
Object.prototype.property相较于Object.property的优点为:前者声明的属性或方法只创建一次,不会像后者随着每次实例的创建而创建,从而节省了大量js内存,提升了js的性能。
如果不想使用Object.prototype.property,也可以使用外部方法来实现Object.prototype.property的功能,如下所示:
function ma(name,age){
this.name=name;
this.age=age;
this.show=method;
}
function method(){
console.log("我的名字是:"+this.name+",我的年龄是:"+this.age);
}
实现的功能一样,但是不利于重写和维护。备注:可以使用 object.hasOwnProperty(property); 来判断已知属性为该实例的私有属性还是原型属性。
所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。
eg.
dog.food='骨头';
dog.hasOwnProperty('name'); //true
dog.hasOwnProperty('food'); //true
dog.hasOwnProperty('age'); //false