面向对象的程序设计之原型模式
原型模式,每個(gè)創(chuàng)建的對象都有一個(gè)prototype屬性,這個(gè)屬性是一個(gè)指針,指向一個(gè)對象,而這個(gè)對象的用途是包含可以由特定類型的所有實(shí)例共享的屬性和方法。
------------------------------------------------------------------------
isPertotypeOf()方法來確定對象之前是否存和原型之間的關(guān)系;
不能重寫原型中的屬性,如果給對象實(shí)例添加的屬性與實(shí)例原型中的一個(gè)屬性同名,那么在實(shí)例對象中創(chuàng)建的屬性會將原型中的屏蔽掉。可以用delete刪除實(shí)例對象中自己添加的屬性;
hasOwnPrototype()可以確定屬性是原型中還是實(shí)例對象中,當(dāng)時(shí)實(shí)例對象中時(shí),返回的是true;
in操作符,有兩種使用方式,單獨(dú)使用和for-in 循環(huán)中。單獨(dú)使用,通過對象能夠訪問屬性時(shí)返回true,無論時(shí)在原型中還是實(shí)例對象中。
下面是依據(jù)以上屬性、方法列舉的實(shí)例
function Person(){ } Person.prototype.name="Nike"; Person.prototype.age=29; Person.prototype.job="Software Engineer"; Person.prototype.sayName=function(){alert(this.name); };function test(){var person1=new Person(); person1.name="TONY"; //delete person1.name; //刪除創(chuàng)建實(shí)例person1時(shí)賦值的name person1.sayName();var person2=new Person(); person2.sayName();基于原型模式創(chuàng)建的對象指向同一個(gè)對象,person1和person2訪問的都是同一組屬性和同一個(gè)sayName()函數(shù),所以返回是true
alert(person1.sayName==person2.sayName);判斷實(shí)例對象是否是Person原型模式,person1是Person的原型模式
alert(window.Person.prototype.isPrototypeOf(person1));hasOwnProperty()方法判斷屬性是否是實(shí)例對象中,如果是,返回true
alert(" person1:"+person1.hasOwnProperty("name")+" person2:"+ person2.hasOwnProperty("name"));in操作符,name屬性是否在person1對象中,該屬性是實(shí)例對象自己賦值的
alert( "name" in person1);in操作符,name屬性是否在person2對象中,該屬性是原型模式中的
alert("name" in person2);判斷對象的屬性是否是原型中的,屬性在對象中,而且不是實(shí)例對象自己賦值的便會返回true
alert(hasOwnPropertyIn(person1,"name");alert( hasOwnPropertyIn(person2,"name"));可以將in操作符與hasOwnProperty()方法一起使用,用于判斷屬性是否是原型中值
function hasOwnPropertyIn(object,sub){return (!object.hasOwnProperty(sub)) && (sub in object); }總結(jié)
以上是生活随笔為你收集整理的面向对象的程序设计之原型模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 23. C# -- 封装
- 下一篇: 一个原生态ajax过程,提交表单的例子