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