亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

JavaScript-原型

Vixb / 3551人閱讀

摘要:不要為繼承關(guān)系多帶帶創(chuàng)建新對(duì)象盡量減少運(yùn)行時(shí)的方法搜索將自身屬性改為原型屬性原型鏈的問(wèn)題原型鏈實(shí)際上是多個(gè)構(gòu)造函數(shù)或者對(duì)象之間共享屬性和方法創(chuàng)建子級(jí)的對(duì)象時(shí),不能像父級(jí)的構(gòu)造函數(shù)傳遞任何參數(shù)實(shí)際開(kāi)發(fā)中,很少多帶帶使用原型鏈。

原型 概述 原型是什么

在JavaScript中,函數(shù)是一個(gè)包含屬性和方法的Function類(lèi)型的對(duì)象原型(Prototype)是Function類(lèi)型對(duì)象的一個(gè)屬性。
在函數(shù)定義時(shí)就包含了Prototype屬性,它的初始值是一個(gè)空對(duì)象。在JavaScript中并沒(méi)有定義函數(shù)的原型類(lèi)型,所以原型是任何類(lèi)型的。
原型用于保存對(duì)象的共享屬性和方法,原型的屬性和方法并不會(huì)影響函數(shù)本身的屬性和方法。

獲取原型
//通過(guò)構(gòu)造函數(shù)的Prototype屬性獲取原型
function fun() {
    console.log("this is function");
};
console.log(fun.prototype);//fun{}
console.log(fun["prototype"]);//fun{}

//通過(guò)Object對(duì)象的getPortotypeOf(函數(shù)名)方法
console.log(Object.getPrototypeOf(fun));//[Function]
原型的屬性和方法
function fun() {
    console.log("this is function")
}
/*  設(shè)置屬性的原型和方法
     函數(shù)名.prototype.屬性名 = 屬性值
     函數(shù)名.prototype.方法名 = function(){}*/
fun.prototype.name = "花間集";
console.log(fun.prototype.name)//花間集
原型屬性 自有屬性和原型屬性

自有屬性:通過(guò)對(duì)象的引用添加的屬性。其他對(duì)象無(wú)此屬性,即使有,也是不彼此立的屬性

原型屬性:從原型對(duì)象中繼承來(lái)的屬性,一旦原型對(duì)象屬性值改變,所有繼承該原型的對(duì)象屬性都改變

//定義構(gòu)造函數(shù)
function fun(agg) {
    //構(gòu)造函數(shù)本身的屬性或方法-自有屬性
    this.agg = agg;
    this.age = function () {
        console.log(100)
    }
}
//通過(guò)原型新增的屬性或方法-原型屬性
fun.prototype.name = "白";

/*  通過(guò)構(gòu)造函數(shù)創(chuàng)建對(duì)象
*    *不僅有構(gòu)造函數(shù)的自有屬性
*    *好友構(gòu)造函數(shù)的原型屬性*/
var fn = new fun(1);
console.log(fn.name);//白
console.log(fn.agg);//1
檢測(cè)原型屬性
function fun() {
    this.name = "花間集"http://自有屬性
}
//原型屬性
fun.prototype.name = "溫庭筠";
//通過(guò)構(gòu)造函數(shù)創(chuàng)建對(duì)象
var fn = new fun();

/*   Object.hasOwnPrototy(屬性名稱(chēng))方法
*     返回值-布爾值
*      true-表示存在指定的自有屬性
*      false-表示不存在指定的自有屬性*/
console.log(fun.hasOwnProperty("name"))//true

/*   使用in關(guān)鍵字檢測(cè)對(duì)象的屬性
*     判斷對(duì)象中是否存在是定屬性(自有屬性或原型屬性)
*     返回值-布爾值*/
console.log("name" in fun);//true
重寫(xiě)與刪除原型屬性
//創(chuàng)建構(gòu)造函數(shù)
function fun() {
    this.name = "村上春樹(shù)"
}
//新增與自有屬性同名的原型屬性
fun.prototype.name = "西尾維新";

//用構(gòu)造函數(shù)創(chuàng)建對(duì)象
var fn = new fun();

//當(dāng)自有屬性和原型屬性同名時(shí),自有屬性的級(jí)別高于原型屬性
console.log(fn.name);//村上春樹(shù)

//刪除對(duì)象的屬性,自有屬性和原型屬性同名,先刪除自有屬性。
//再刪除一次則刪除原型屬性
delete fn.name;

//重新訪問(wèn)對(duì)象的屬性
console.log(fn.name);//西尾維新
isPrototypeOf()方法

該方法用來(lái)判斷對(duì)象是否是另一個(gè)對(duì)象的原型

//通過(guò)初始化器方式定義對(duì)象
var obj ={
    name : "花間集"
};
//定義構(gòu)造函數(shù)
function Fun () {
    this.agg = 2
}
//將對(duì)象obj賦值于函數(shù)Fun的原型
Fun.prototype=obj;
//用構(gòu)造函數(shù)創(chuàng)建對(duì)象
var fn = new Fun();
//判斷對(duì)象obj是不是對(duì)象fn的原型
var f = obj.isPrototypeOf(fn);
console.log(f);//true
擴(kuò)展內(nèi)建對(duì)象

JavaScript中的內(nèi)置對(duì)象有些也具有Prototype屬性,利用內(nèi)置對(duì)象的prototype屬性可以為內(nèi)置對(duì)象擴(kuò)展屬性或者方法。
一般建議慎用這種方式,可能會(huì)應(yīng)瀏覽器版本問(wèn)題導(dǎo)致沖突。

繼承 原型鏈
/*    原型鏈
*   類(lèi)似于子級(jí)可以直接使用父級(jí)的屬性或者方法
*   構(gòu)造函數(shù)或者對(duì)象的原型一級(jí)一級(jí)的指向Object的原型
*   后面的可以直接使用前面的原型定義->實(shí)現(xiàn)繼承*/
function A () {
    this.a = "a"
}
var a = new A();//通過(guò)構(gòu)造函數(shù)創(chuàng)建對(duì)象

function B () {
    this.b = "b"
}
//B函數(shù)的原型指向?qū)ο骯
B.prototype=a;
//構(gòu)造函數(shù)創(chuàng)建對(duì)象
var b = new B();
console.log(b.a);//a
console.log(b.b);//b

function C () {
    this.c = "c"
}
//C函數(shù)的原型指向b對(duì)象
C.prototype=b;
//創(chuàng)建構(gòu)造函數(shù)
var c = new C();

console.log(c.a);//a
console.log(c.b);//b
console.log(c.c);//c
只繼承于原型的原型鏈

出于對(duì)效率的考慮,盡可能的降屬性和方法添加到原型上。

不要為繼承關(guān)系多帶帶創(chuàng)建新對(duì)象

盡量減少運(yùn)行時(shí)的方法搜索

function A () {
    //將自身屬性改為原型屬性
}
A.prototype.a="a";

function B () {

}
B.prototype = A.prototype;

B.prototype.b="b";
var b = new B();
console.log(b.a);//a
console.log(b.b);//b

function C () {
     this.c="c"
}

C.prototype = B.prototype;
var c = new C();
console.log(c.a);//a
console.log(c.b);//b
console.log(c.c);//c
原型鏈的問(wèn)題

原型鏈實(shí)際上是多個(gè)構(gòu)造函數(shù)或者對(duì)象之間共享屬性和方法

創(chuàng)建子級(jí)的對(duì)象時(shí),不能像父級(jí)的構(gòu)造函數(shù)傳遞任何參數(shù)

實(shí)際開(kāi)發(fā)中,很少多帶帶使用原型鏈。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/108259.html

相關(guān)文章

  • 理解JavaScript的核心知識(shí)點(diǎn):原型

    摘要:首先,需要來(lái)理清一些基礎(chǔ)的計(jì)算機(jī)編程概念編程哲學(xué)與設(shè)計(jì)模式計(jì)算機(jī)編程理念源自于對(duì)現(xiàn)實(shí)抽象的哲學(xué)思考,面向?qū)ο缶幊淌瞧湟环N思維方式,與它并駕齊驅(qū)的是另外兩種思路過(guò)程式和函數(shù)式編程。 JavaScript 中的原型機(jī)制一直以來(lái)都被眾多開(kāi)發(fā)者(包括本人)低估甚至忽視了,這是因?yàn)榻^大多數(shù)人沒(méi)有想要深刻理解這個(gè)機(jī)制的內(nèi)涵,以及越來(lái)越多的開(kāi)發(fā)者缺乏計(jì)算機(jī)編程相關(guān)的基礎(chǔ)知識(shí)。對(duì)于這樣的開(kāi)發(fā)者來(lái)說(shuō) J...

    iKcamp 評(píng)論0 收藏0
  • 如何理解JavaScript原型原型鏈?

    摘要:之前有朋友問(wèn)怎么去理解原型和原型鏈的問(wèn)題。理解原型鏈的小技巧將箭頭視作泛化子類(lèi)到父類(lèi)關(guān)系那么圖中所有的虛線將構(gòu)成一個(gè)繼承層級(jí),而實(shí)線表示屬性引用。原型鏈?zhǔn)菍?shí)現(xiàn)繼承的重要方式,原型鏈的形成是真正是靠而非。 之前有朋友問(wèn)怎么去理解原型和原型鏈的問(wèn)題。這個(gè)問(wèn)題,在面試中,很多同學(xué)經(jīng)常都會(huì)遇到。這里給大家講講,方便大家記憶。 JavaScript的特點(diǎn)JavaScript是一門(mén)直譯式腳本...

    xuexiangjys 評(píng)論0 收藏0
  • 如何理解JavaScript原型原型鏈?

    摘要:之前有朋友問(wèn)怎么去理解原型和原型鏈的問(wèn)題。理解原型鏈的小技巧將箭頭視作泛化子類(lèi)到父類(lèi)關(guān)系那么圖中所有的虛線將構(gòu)成一個(gè)繼承層級(jí),而實(shí)線表示屬性引用。原型鏈?zhǔn)菍?shí)現(xiàn)繼承的重要方式,原型鏈的形成是真正是靠而非。 之前有朋友問(wèn)怎么去理解原型和原型鏈的問(wèn)題。這個(gè)問(wèn)題,在面試中,很多同學(xué)經(jīng)常都會(huì)遇到。這里給大家講講,方便大家記憶。 JavaScript的特點(diǎn)JavaScript是一門(mén)直譯式腳本...

    adie 評(píng)論0 收藏0
  • 深入理解Javascript原型關(guān)系

    摘要:如下所示在規(guī)范中,已經(jīng)正式把屬性添加到規(guī)范中也可以通過(guò)設(shè)置和獲取對(duì)象的原型對(duì)象對(duì)象之間的關(guān)系可以用下圖來(lái)表示但規(guī)范主要介紹了如何利用構(gòu)造函數(shù)去構(gòu)建原型關(guān)系。 前言 在軟件工程中,代碼重用的模式極為重要,因?yàn)樗麄兛梢燥@著地減少軟件開(kāi)發(fā)的成本。在那些主流的基于類(lèi)的語(yǔ)言(比如Java,C++)中都是通過(guò)繼承(extend)來(lái)實(shí)現(xiàn)代碼復(fù)用,同時(shí)類(lèi)繼承引入了一套類(lèi)型規(guī)范。而JavaScript是...

    ethernet 評(píng)論0 收藏0
  • JavaScript基礎(chǔ)之創(chuàng)建對(duì)象、原型原型對(duì)象、原型

    摘要:在最開(kāi)始的時(shí)候,原型對(duì)象的設(shè)計(jì)主要是為了獲取對(duì)象的構(gòu)造函數(shù)。同理數(shù)組通過(guò)調(diào)用函數(shù)通過(guò)調(diào)用原型鏈中描述了原型鏈的概念,并將原型鏈作為實(shí)現(xiàn)繼承的主要方法。 對(duì)象的創(chuàng)建 在JavaScript中創(chuàng)建一個(gè)對(duì)象有三種方式。可以通過(guò)對(duì)象直接量、關(guān)鍵字new和Object.create()函數(shù)來(lái)創(chuàng)建對(duì)象。 1. 對(duì)象直接量 創(chuàng)建對(duì)象最直接的方式就是在JavaScript代碼中使用對(duì)象直接量。在ES5...

    wangbjun 評(píng)論0 收藏0
  • 細(xì)說(shuō) Javascript 對(duì)象篇(二) : 原型對(duì)象

    摘要:并沒(méi)有類(lèi)繼承模型,而是使用原型對(duì)象進(jìn)行原型式繼承。我們舉例說(shuō)明原型鏈查找機(jī)制當(dāng)訪問(wèn)一個(gè)對(duì)象的屬性時(shí),會(huì)從對(duì)象本身開(kāi)始往上遍歷整個(gè)原型鏈,直到找到對(duì)應(yīng)屬性為止。原始類(lèi)型有以下五種型。此外,試圖查找一個(gè)不存在屬性時(shí)將會(huì)遍歷整個(gè)原型鏈。 Javascript 并沒(méi)有類(lèi)繼承模型,而是使用原型對(duì)象 prototype 進(jìn)行原型式繼承。 盡管人們經(jīng)常將此看做是 Javascript 的一個(gè)缺點(diǎn),然...

    lansheng228 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<