摘要:可以用刪除實(shí)例對象中自己添加的屬性可以確定屬性是原型中還是實(shí)例對象中,當(dāng)時(shí)實(shí)例對象中時(shí),返回的是操作符,有兩種使用方式,多帶帶使用和循環(huán)中。多帶帶使用,通過對象能夠訪問屬性時(shí)返回,無論時(shí)在原型中還是實(shí)例對象中。
原型模式,每個(gè)創(chuàng)建的對象都有一個(gè)prototype屬性,這個(gè)屬性是一個(gè)指針,指向一個(gè)對象,而這個(gè)對象的用途是包含可以由特定類型的所有實(shí)例共享的屬性和方法。
------------------------------------------------------------------------
isPertotypeOf()方法來確定對象之前是否存和原型之間的關(guān)系;
不能重寫原型中的屬性,如果給對象實(shí)例添加的屬性與實(shí)例原型中的一個(gè)屬性同名,那么在實(shí)例對象中創(chuàng)建的屬性會(huì)將原型中的屏蔽掉??梢杂胐elete刪除實(shí)例對象中自己添加的屬性;
hasOwnPrototype()可以確定屬性是原型中還是實(shí)例對象中,當(dāng)時(shí)實(shí)例對象中時(shí),返回的是true;
in操作符,有兩種使用方式,多帶帶使用和for-in 循環(huán)中。多帶帶使用,通過對象能夠訪問屬性時(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í)例對象自己賦值的便會(huì)返回true
alert(hasOwnPropertyIn(person1,"name"); alert( hasOwnPropertyIn(person2,"name"));
可以將in操作符與hasOwnProperty()方法一起使用,用于判斷屬性是否是原型中值
function hasOwnPropertyIn(object,sub){ return (!object.hasOwnProperty(sub)) && (sub in object); }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/85702.html
摘要:在基于原型的面向?qū)ο蠓绞街校瑢ο髣t是依靠構(gòu)造函數(shù)和原型構(gòu)造出來的。來看下面的例子優(yōu)點(diǎn)與單純使用構(gòu)造函數(shù)不一樣,原型對象中的方法不會(huì)在實(shí)例中重新創(chuàng)建一次,節(jié)約內(nèi)存。 我們所熟知的面向?qū)ο笳Z言如 C++、Java 都有類的的概念,類是實(shí)例的類型模板,比如Student表示學(xué)生這種類型,而不表示任何具體的某個(gè)學(xué)生,而實(shí)例就是根據(jù)這個(gè)類型創(chuàng)建的一個(gè)具體的對象,比如zhangsan、lisi,由...
摘要:對象的定義無序?qū)傩缘募蠈傩缘闹悼梢允腔局祵ο蠡蛘吆瘮?shù)每個(gè)對象都是基于一個(gè)應(yīng)用類型創(chuàng)建的這個(gè)引用類型可以是內(nèi)置的例如也可以是用戶自定義的基于創(chuàng)建對象所有的對象都是繼承自的因此我們可以從著手創(chuàng)建對象通過關(guān)鍵字創(chuàng)建對象通過對象字面量創(chuàng)建對象基 對象的定義:無序?qū)傩缘募?屬性的值可以是基本值、對象或者函數(shù).每個(gè)對象都是基于一個(gè)應(yīng)用類型創(chuàng)建的,這個(gè)引用類型可以是內(nèi)置的(例如Object A...
摘要:原型模式平行的繼承層次使用工廠模式在大型設(shè)計(jì)中,必須去維護(hù)大量的產(chǎn)品類。上文中,稱之為特殊的耦合在這里我們介紹一種其抽象工廠模式的變體原型模式。面向?qū)ο笤O(shè)計(jì)模式目錄 原型模式 平行的繼承層次使用工廠模式在:大型設(shè)計(jì)中,必須去維護(hù)大量的產(chǎn)品類。(上文中,稱之為特殊的耦合) 在這里我們介紹一種其抽象工廠模式的變體:原型模式。它使用clone關(guān)鍵詞,來復(fù)制具體產(chǎn)品類,使得具體產(chǎn)品類能完成自我...
摘要:組合使用構(gòu)造函數(shù)模式和原型模式創(chuàng)建自定義類型的最常見方式,就是組合使用構(gòu)造函數(shù)模式與原型模式。也就是說,寄生構(gòu)造函數(shù)模式下,構(gòu)造函數(shù)創(chuàng)建的對象與在構(gòu)造函數(shù)外創(chuàng)建的對象沒有什么不同。 前言 最近在細(xì)讀Javascript高級(jí)程序設(shè)計(jì),對于我而言,中文版,書中很多地方翻譯的差強(qiáng)人意,所以用自己所理解的,嘗試解讀下。如有紕漏或錯(cuò)誤,會(huì)非常感謝您的指出。文中絕大部分內(nèi)容引用自《JavaScri...
摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍(lán)圖或原型。在中,對象通過對類的實(shí)體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
閱讀 2825·2021-10-13 09:48
閱讀 3790·2021-10-13 09:39
閱讀 3601·2021-09-22 16:04
閱讀 1831·2021-09-03 10:48
閱讀 845·2021-08-03 14:04
閱讀 2365·2019-08-29 15:18
閱讀 3407·2019-08-26 12:19
閱讀 2874·2019-08-26 12:08