prototype属性简介

来源:互联网 发布:阿里云怎么打开端口 编辑:程序博客网 时间:2024/06/06 19:23
prototype为对象原型的意思,在JS中配置对象的prototype属性,可以减少js内存空间的占用,提高js的性能。
使用示例:

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.propertyconsole.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');     //truedog.hasOwnProperty('food');     //truedog.hasOwnProperty('age');      //false
原创粉丝点击