摘要:構(gòu)造函數(shù)屬性名屬性值,方法名自由屬性和原型屬性自由屬性通過(guò)對(duì)象的引用添加的屬性。屬性上述代碼說(shuō)明對(duì)象存在一個(gè)指向構(gòu)造函數(shù)的原型,這個(gè)鏈接被叫做屬性只能在調(diào)式時(shí)使用。
原型
原型是聲明
在JavaScript中, 函數(shù)時(shí)一個(gè)包含屬性和方法的Function類型的對(duì)象。而原型(Prototype)就是Function類型對(duì)象的一個(gè)屬性。在函數(shù)定義是就包含了protopype屬性,它的出事值時(shí)一個(gè)空對(duì)像。在JavaScript中并沒(méi)有定義函數(shù)的圓形類型,所以原型可以時(shí)任何類型。 原型時(shí)用于保護(hù)對(duì)象的共享屬性和方法的,原型的屬性和方法并不會(huì)影響函數(shù)本身的屬性和方法。
function foo (a,b){
return a+b;
}
console.log (typeof foo.prototyoe);//boject
獲取原型
通過(guò)如下兩種方式可以獲取對(duì)象的原型,從而設(shè)置共享的屬性和方法:
通過(guò)構(gòu)造函數(shù)的prototype屬性
function person(){
console.log ("person instantiated");
}
console.log(person.prototype);
通過(guò)Object對(duì)象的getPrototypeOf(obj)方法。
function Person(){
console.log (person instantiated);
}
console.log(Object.getprototypeOf(person));
原型的屬性和方法
通過(guò)如下兩種方式可以設(shè)置原型的屬性和方法。
構(gòu)造函數(shù).Prototype.屬性名+屬性值;
構(gòu)造函數(shù).prototype.方法名=function(){}
直接為原型定義一個(gè)新對(duì)象。
構(gòu)造函數(shù).prototype={
屬性名:屬性值,
方法名:function(){}
}
自由屬性和原型屬性
自由屬性: 通過(guò)對(duì)象的引用添加的屬性。其他對(duì)象可能無(wú)此屬性:即使有,也是彼此獨(dú)立的屬性。
原型屬性:從原型屬性對(duì)象中繼承來(lái)的屬性,一旦原型屬性中屬性改變,所有繼承原型屬性對(duì)象屬性均改變。
function Emo(ename,salary){
this.ename=ename;
this.salary=salary;
}
Emp.prototype={city:北京市,dept:研發(fā)部}
var emp1 =new Emp("Mary",3800);
var emp2 =new Emp("tmp",3000);
檢測(cè)自由或原有屬性
使用hasOwnPrototype()方法檢測(cè)對(duì)象時(shí)否具有指定的自有屬性:
function Hero(){}
var hero = new Hero()
console.log(hero.hasOwnPrototype("name"));
使用in關(guān)鍵字檢測(cè)對(duì)象及其原型鏈中是否具有指定的屬性:
function Hero(){}
var hero=new Hero();
console.;log("name"in hero);
擴(kuò)展屬性或方法
通過(guò)原型看為指定構(gòu)造函數(shù)或?qū)ο髷U(kuò)展其屬性或方法,如下代碼實(shí)例:
function Hero (){}
Hero.protoptype={
name:"Mary",
salary:3800}
var hero =new Hero();
console.log (hero.name);//mary
重寫(xiě)原型屬性
通過(guò)構(gòu)造函數(shù)或?qū)ο蟮淖杂蓪傩钥梢灾貙?xiě)原型的屬性, 如下代碼示例:
function Hero(){}
Hero.prototype={
name:"Mary",
salary:3800
}
var hero = new Hero();
hero.name="tom";
console.log(hero,name);//tom
刪除屬性
通過(guò)delete關(guān)鍵詞可以刪除對(duì)象的屬性,如果該對(duì)象即具有原型屬性又具有既有屬性的話, 先刪除自由屬性,在刪除原型屬性。如下代碼示例:
function Hero(){}
Hero.prototype= {name:"Mary",salary:3800}
var hero =new Hero();
hero.name ="Tom";
delete hero.name;//刪除Tom
console.log(hero.name);//mary
delete hero.name;//刪除Mary
console.log(hero.name);//undefind
isprototypeOf()方法
每一個(gè)對(duì)象都會(huì)具有一個(gè)isPrototypeOf()方法,該方法用來(lái)判斷一個(gè)對(duì)象是否時(shí)另一個(gè)對(duì)象的原型。
var monkey= {}
function Human(){}
Human.prototype= monkey;
var man = new Human();
monkey.isPrototypeOf(man);//true
__proto__屬性
function Hero (){}
Hero.prototype={
name:"mary",
salay:3800
}
var hero =new Hero();
console.log(hero.name);//maey
上述代碼說(shuō)明hero 對(duì)象存在一個(gè)指向構(gòu)造函數(shù)Hero的原型,這個(gè)鏈接被叫做————proto————屬性只能在調(diào)式時(shí)使用。
————proto————屬性時(shí)指定對(duì)象的屬性。
prototype屬性時(shí)指定構(gòu)造函數(shù)的屬性
擴(kuò)展內(nèi)建對(duì)象
JavaScript中的內(nèi)置對(duì)象有些具有prototype屬性,利用內(nèi)置對(duì)象prototype屬性可以為內(nèi)置對(duì)象擴(kuò)展屬性或方法。通過(guò)原型屬性擴(kuò)展內(nèi)置對(duì)象的屬性和方法非常靈活,根據(jù)個(gè)性化要求制定JavaScript語(yǔ)言的具體內(nèi)容。一般建議慎用這種方式,如果JavaScript的版本更新時(shí)可能會(huì)提供個(gè)性化屬性或方法,導(dǎo)致沖突。
Array.prototype.inArray =fuction (color){
if (this)[i]===color {return true;}
}
return false;
}
var a =["red","green","blue"];
console.log (a.inArray("red"));//true
console.log(a.inArray("yellow"));//false
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108261.html
摘要:先來(lái)一個(gè)構(gòu)造函數(shù)構(gòu)造一個(gè)人類實(shí)例化一個(gè)對(duì)象看看的名字是什么打印結(jié)果先說(shuō)一個(gè)前提只要是函數(shù),就會(huì)有一個(gè)屬性,可以理解為子代的原型遺傳基因只要是對(duì)象,就會(huì)有一個(gè)方法,可以理解為向上尋找原型的方法。 關(guān)于javascript中的原型和原型鏈 我GitHub上的菜鳥(niǎo)倉(cāng)庫(kù)地址: 點(diǎn)擊跳轉(zhuǎn)查看其他相關(guān)文章 文章在我的博客上的地址: 點(diǎn)擊跳轉(zhuǎn) ? ? ? ? 關(guān)于javascript中的原型和原...
摘要:原型鏈上有兩個(gè)關(guān)鍵詞和比較重要,是設(shè)置構(gòu)造函數(shù)的原型對(duì)象,是聲明原型的構(gòu)造函數(shù),不管是對(duì)象還是函數(shù),都有一個(gè)隱式屬性用來(lái)構(gòu)成一條完整原型鏈的指向。 思考 說(shuō)到原型,不得不提到原型鏈,js中不管是對(duì)象還是方法(也是對(duì)象)都有個(gè)隱藏屬性_proto_,來(lái)表示原型鏈的下一個(gè)指向,一般對(duì)象是指向Object.prototype,方法是指向Function.prototype,構(gòu)造函數(shù)new出來(lái)...
摘要:三組合繼承結(jié)合原型鏈方式和借用構(gòu)造函數(shù)方式的有點(diǎn),進(jìn)行改進(jìn)的一種繼承方式。四寄生組合式繼承為了解決組合繼承中子構(gòu)造函數(shù)的原型鏈出現(xiàn)冗余的屬性和方法,引入的一種繼承方式。 說(shuō)在前面:為了使代碼更為簡(jiǎn)潔方便理解, 本文中的代碼均將非核心實(shí)現(xiàn)部分的代碼移出。 一、原型鏈方式關(guān)于原型鏈,可點(diǎn)擊《深入淺出,JS原型鏈的工作原理》,本文不再重復(fù)敘述。 思路:讓子構(gòu)造函數(shù)的原型等于父構(gòu)造函數(shù)的實(shí)例...
摘要:忍者級(jí)別的函數(shù)操作對(duì)于什么是匿名函數(shù),這里就不做過(guò)多介紹了。我們需要知道的是,對(duì)于而言,匿名函數(shù)是一個(gè)很重要且具有邏輯性的特性。通常,匿名函數(shù)的使用情況是創(chuàng)建一個(gè)供以后使用的函數(shù)。 JS 中的遞歸 遞歸, 遞歸基礎(chǔ), 斐波那契數(shù)列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果...
摘要:然而,臨近規(guī)范發(fā)布時(shí),有建議提及未來(lái)的版本號(hào)切換為編年制,比如用同來(lái)指代在年末前被定稿的所有版本??偟脕?lái)說(shuō)就是版本號(hào)不再那么重要了,開(kāi)始變得更像一個(gè)萬(wàn)古長(zhǎng)青的活標(biāo)準(zhǔn)。 你不知道的JS(下卷)ES6與之未來(lái) 第一章:ES的今與明 在你想深入這本書(shū)之前,你應(yīng)該對(duì)(在讀此書(shū)時(shí))JavaScript的最近標(biāo)準(zhǔn)掌握熟練,也就是ES5(專業(yè)來(lái)說(shuō)是ES 5.1)。在此,我們決定全方面地談?wù)撽P(guān)于將近的...
閱讀 3158·2021-11-22 13:54
閱讀 3450·2021-11-15 11:37
閱讀 3612·2021-10-14 09:43
閱讀 3508·2021-09-09 11:52
閱讀 3612·2019-08-30 15:53
閱讀 2474·2019-08-30 13:50
閱讀 2065·2019-08-30 11:07
閱讀 897·2019-08-29 16:32