[size=medium;]一、 prototype:每个函数(函数也可以理解为对对象)都有一个prototype属性,是一个指向某个对象的指针,这里所说的“某个对象”是由特定类型的所有实例共享的属性和方法构成的一个对象。可以简单的理解为由构造方法创建的对象的原型对象。[/size]
[size=medium;]<img src="http://dl.iteye.com/upload/attachment/543125/83a7a4a6-6291-36d6-8889-440a3f4e8357.png" alt="" width="536" height="139">[/size]
[size=medium;]二、 定义方式[/size]
[size=medium;] 1.construtor:所有原型对象都有一个construtor属性,他是指向prototype 属性所在的函数的一个指针,可以用下面语句检测:<br>alert( person.prototype.constructor == person);//true[/size]
[size=medium;]<br>[/size]
[size=medium;]2.person.prototype.constructor与person.constructor的对比[/size]
[size=medium;]<img src="http://dl.iteye.com/upload/attachment/543127/42372bb3-7573-3c44-93b0-559f4182ebdf.png" alt="" width="615" height="216">[/size]
<p class="msonormal" style="text-align: left;" align="left"> [size=medium;] [/size]
[size=medium;]7.判断属性来自于原型属性是需要用的in操作符<br>单独使用in时,通过对象能够访问的给定的属性值时返回true,而不在乎是从原型中还是实例中访问的。[/size]
[size=medium;]<br>[/size]
[size=medium;]<img src="http://dl.iteye.com/upload/attachment/543125/83a7a4a6-6291-36d6-8889-440a3f4e8357.png" alt="" width="536" height="139">[/size]
[size=medium;]二、 定义方式[/size]
function person(){} person.prototype.name = "zhangsan"; person.prototype.age =23; person.prototype.sayhello = function(){ return "hello,i'm zhangsan"; }; [size=medium;] 因为每个函数都有prototype属性,而prototype又是指向原型对象的一个指针,所有我们就可以采用“.”的方式去定义原型对象的属性和方法。接下来,创建person对象的时候就可以直接调用构造函数来创建。[/size] var person1 = new person(); var person2 = new person(); [size=medium;] person1、person2对象都共享原型对象所有的属性和方法,我们可以从以下输出结果可以看出来:[/size] alert(person1.name); //zhangsan alert(person2.name); //zhangsan alert(person1.sayhello()); //hello,i’m zhangsan alert(person2.sayhello()); //hello,i’m zhangsan [size=medium;] 三、 深入理解原型对象[/size][size=medium;] 1.construtor:所有原型对象都有一个construtor属性,他是指向prototype 属性所在的函数的一个指针,可以用下面语句检测:<br>alert( person.prototype.constructor == person);//true[/size]
[size=medium;]<br>[/size]
[size=medium;]2.person.prototype.constructor与person.constructor的对比[/size]
alert( person.prototype.constructor) // function person() {}alert(person.constructor); //function function() {[native code]} [size=medium;] 一个alert语句很好理解,因为在前面已经说明constructor指向的就是person()函数,但是第二个alert显示的是function()函数,究及原因还得从“函数与对象”的关系说起。[/size] alert(typeof person); //function alert(person instanceof object); //true [size=medium;] 从上面两个结果可以看出,person是一个函数,但是他可以作为对象存在,从这里我们就能很好的理解person.constructor显示的信息为什么是“function function() {[native code]}”了。具体可以这样去分析:<br><br>因为:function person(){}等同于var person = new function(){};[/size][size=medium;]<img src="http://dl.iteye.com/upload/attachment/543127/42372bb3-7573-3c44-93b0-559f4182ebdf.png" alt="" width="615" height="216">[/size]
alert(person1.name); //zhangsan person1.name="lisi"; alert(person1.name); //lisi alert(person.prototype.name);//zhangsan delete person1.name; alert(person1.name); //zhangsan [size=medium;] 6.使用hasownproperty(name)(该方法继承于object)判断属性是对象实例本身还是来自于原型对象中。[/size]<p class="msonormal" style="text-align: left;" align="left"> [size=medium;] [/size]
alert(person1.hasownproperty(“name”)); //false peson1.name=”lisi”; alert(person1.hasownproperty(“name”)); //true [size=medium;]7.判断属性来自于原型属性是需要用的in操作符<br>单独使用in时,通过对象能够访问的给定的属性值时返回true,而不在乎是从原型中还是实例中访问的。[/size]
!peron1.hasownproperty(“name”)&&(“name” in person1) //true [size=medium;]今天就写到这里,期待下期的精彩!!![/size][size=medium;]<br>[/size]
本文详细解析了JavaScript中prototype属性的作用及其使用方式,探讨了如何通过构造函数创建对象实例,并共享原型对象上的属性和方法。

被折叠的 条评论
为什么被折叠?



