成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript 之 面向?qū)ο?[ 原型 ]

warmcheng / 1205人閱讀

摘要:原型描述所有函數(shù)類型都具有的屬性在函數(shù)進行定義時,就包含屬性屬性的默認值為一個空對象獲取原型第一種構(gòu)造函數(shù)的屬性第二種對象提供的方法啊哈哈所有函數(shù)都具有屬性,可以直接調(diào)用顯示類型包含構(gòu)造函數(shù)所有引用類型都可以使用構(gòu)造函數(shù)方式定義所有引用類

原型 描述

所有函數(shù)(Function類型)都具有的屬性

在函數(shù)進行定義時,就包含prototype屬性

prototype屬性的默認值為一個空對象 {}

獲取原型

第一種

構(gòu)造函數(shù)的prototype屬性

第二種

Object對象提供的getPrototypeOf()方法

function fun() {
    console.log( "啊哈哈" );
}
/* 所有函數(shù)都具有prototype屬性,可以直接調(diào)用 */
console.log( fun.prototype );// 顯示 fun {}
/*
    Function類型包含 構(gòu)造函數(shù)
     * 所有引用類型都可以使用 構(gòu)造函數(shù)方式定義 - 所有引用類型都是構(gòu)造函數(shù)
     * 構(gòu)造函數(shù)也可以用來定義對象(Object類型) - Object也可以調(diào)用prototype屬性
 */
/* 引用類型調(diào)用prototype屬性 */
console.log( String.prototype );// 顯示 [String: ""]
/* Object調(diào)用prototype屬性 */
console.log( Object.prototype );// 顯示 {}

/*
    獲取原型
     * 可以通過以下兩種方法獲取指定目標的原型
     * 第一種
      * 構(gòu)造函數(shù)的prototype屬性
     * 第二種
      * Object對象提供的getPrototypeOf()方法
 */

/* 定義一個函數(shù) */
function fn() {
    console.log( "嘔呀呀" );
}
/* 通過prototype屬性獲取 */
console.log( fn.prototype );// 顯示 fn {}
/* 通過getPrototypeOf()方法獲取 */
console.log( Object.getPrototypeOf( fn ) );// 顯示 [Function]
原型新增屬性或方法

獲取的原型會得到一個空對象

是對象就有屬性或方法

也可以新增屬性或方法

新增方式

第一種方式

構(gòu)造函數(shù).prototype.屬性名(方法名) = 屬性值(方法體)

/* 定義一個函數(shù) */
function fun() {
    console.log( 100 );
}

/* 第一種方式 */
/* 獲取原型 */
console.log( fun.prototype );// 顯示 fun {}
/* 為原型添加屬性或方法 */
fun.prototype.name = "唐三";
/* 才重新獲取原型 */
console.log( fun.prototype );// 顯示 fun { name: "唐三" }

第二種方式

Object.defineProperty( 獲取原型,屬性名(方法名),{ 屬性描述符 } )

/* 定義一個函數(shù) */
function fun() {
    console.log( 100 );
}
/* 第二種方式 */
/* 獲取原型 */
console.log( fun.prototype );// 顯示 fun { name: "唐三" }
/* 為原型添加屬性或方法 */
Object.defineProperty( fun.prototype, "nian", {
    /* 設(shè)置屬性值或方法體 */
    value : 20,
    /*
        設(shè)置是否可枚舉
         * 用于打印對象時可以正常顯示新增的屬性
         * 不設(shè)置可枚舉時將無法顯示新增屬性,只顯示原有屬性
          * 顯示 fun { name: "唐三" }
     */
    enumerable : true
} );
/* 才重新獲取原型 */
console.log( fun.prototype );// 顯示 fun { name: "唐三", nian: 20 }
自有屬性和原型屬性 自有屬性

構(gòu)造函數(shù)(對象)本身自帶或添加的屬性

原型屬性

從原型中獲得屬性

/* 定義一個構(gòu)造函數(shù) */
function Fun() {
    /* 設(shè)置自有屬性和方法 */
    this.name = "唐三";
    this.menpai = function () {
        console.log( "唐門" );
    }
}
/* 獲取原型 */
console.log( Fun.prototype );//Fun {}
/* 為原型添加新屬性 - 原型屬性 */
Fun.prototype.nian = 20;
/* 在獲取原型 */
console.log( Fun.prototype );//Fun { nian: 20 }

/*
    通過構(gòu)造函數(shù)Fun創(chuàng)建對象
     * 該對象具有構(gòu)造函數(shù)Fun的自有屬性
     * 該對象也具有構(gòu)造函數(shù)Fun的原型屬性
 */
/* 創(chuàng)建對象 */
var fn = new Fun();
/* 調(diào)用自有屬性 */
console.log( fn.name );// 顯示 唐三
/* 調(diào)用原型屬性 */
console.log( fn.nian );// 顯示 20

/* 使用相同的構(gòu)造函數(shù)在創(chuàng)建一個對象 */
var fu = new Fun();
/* 新對象對自有屬性進行修改 */
fu.name = "融念冰";
/* 調(diào)用修改的自有屬性 */
console.log( fu.name );// 顯示 融念冰
/* 兩個對象之間不會有影響 */
console.log( fn.name );// 顯示 唐三

/* 修改原型屬性 */
Fun.prototype.nian = 25;
/* 以構(gòu)造函數(shù)Fun創(chuàng)建的對象都會被修改 */
console.log( fn.nian );// 顯示 25
console.log( fu.nian );// 顯示 25
重寫屬性

表示在自有屬性和原型屬性同名時,自有屬性會覆蓋原型屬性

/* 定義一個構(gòu)造函數(shù) */
function Fun() {
    /* 自有屬性 */
    this.name = "唐三";
}
/* 獲取原型并添加原型屬性 */
Fun.prototype.name = "融念冰";

/* 創(chuàng)建一個對象 */
var fn = new Fun();
/* 調(diào)用屬性 */
console.log( fn.name );// 顯示 唐三(自身屬性)
刪除屬性

通過delete關(guān)鍵字來進行刪除

如果進行刪除的目標對象同時具有自有屬性和原型屬性,會先刪除自有屬性

/* 定義一個構(gòu)造函數(shù) */
function Fun() {
    /* 自有屬性 */
    this.name = "唐三";
}
/* 獲取原型并添加原型屬性 */
Fun.prototype.name = "融念冰";

/* 創(chuàng)建一個對象 */
var fn = new Fun();
/* 調(diào)用屬性 */
console.log( fn.name );// 顯示 唐三(自身屬性)

/*
    刪除屬性
     * 通過delete關(guān)鍵字來進行刪除
     * 如果進行刪除的目標對象同時具有自有屬性和原型屬性,會先刪除自有屬性
 */
/* 刪除目標對象的指定屬性 */
delete fn.name;// 優(yōu)先刪除自有屬性
/* 在調(diào)用已刪除的屬性 */
console.log( fn.name );// 顯示 融念冰(原型屬性)
檢測屬性

表示檢測目標對象中,是否存在指定屬性

Object.hasOwnProperty()方法

Object.hasOwnProperty( 指定屬性名稱 )方法

用于判斷當前指定屬性是否為自有屬性

true - 表示存在

false - 表示不存在

/* 定義一個構(gòu)造函數(shù) */
function Fun() {
    /* 自有屬性 */
    this.name = "唐三";
}
/* 原型屬性 */
Fun.prototype.name = "融念冰";
/* 創(chuàng)建對象 */
var fn = new Fun();

/* Object.hasOwnProperty()方法 */
console.log( fn.hasOwnProperty(  "name") );// 顯示 true
in 關(guān)鍵字

in 關(guān)鍵字 - (屬性名 in 對象名)

用于判斷對象中是否存在指定屬性(自有屬性或原型屬性)

true - 表示存在

false - 表示不存在

/* 定義一個構(gòu)造函數(shù) */
function Fun() {
    /* 自有屬性 */
    this.name = "唐三";
}
/* 原型屬性 */
Fun.prototype.name = "融念冰";
/* 創(chuàng)建對象 */
var fn = new Fun();
/* in 關(guān)鍵字 */
console.log( "name" in fn );// 顯示 true
顯示原型和隱式原型 顯示原型

所有函數(shù)的原型(prototype)都可以稱為是顯示原型

隱式原型

所有對象的原型(__proto__)都可以稱為是隱式原型

/* 定義一個構(gòu)造函數(shù) */
function Fun() {
    /* 自有屬性 */
    this.name = "唐三";
}
/* 原型屬性 */
Fun.prototype.nian = 20;
/* 創(chuàng)建對象 */
var fn = new Fun();

/* 調(diào)用自有屬性 */
console.log( fn.name );// 顯示 唐三
/* 調(diào)用原型屬性 */
console.log( fn.nian );// 顯示 20

/* 對象調(diào)用函數(shù)的原型 */
console.log( fn.prototype );// 顯示 undefined 對象會將prototype,當做自身的屬性進行調(diào)用
/* 對象調(diào)用對象的原型 */
console.log( fn.__proto__ );// 顯示 Fun { nian: 20 }
isPrototypeOf()方法

表示用于判斷一個指定對象是否為另一個目標對象的原型

true - 表示 是

false - 表示 不是

/* 定義一個對象 */
var obj = {
    name : "唐三"
}
/* 定義一個構(gòu)造函數(shù) */
function Fun() {}
/* 將指定對象賦值給構(gòu)造函數(shù)Fun的原型 */
Fun.prototype = obj;
/* 創(chuàng)建對象 */
var fn = new Fun();

/* 判斷obj對象是否為fn對象的原型 */
console.log( obj.isPrototypeOf(  fn) );// 顯示 true

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/108283.html

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對象”還好嗎?

    摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    李昌杰 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對象”還好嗎?

    摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    Lyux 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對象”還好嗎?

    摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    AaronYuan 評論0 收藏0
  • 面向對象JavaScript繼承(一) 類式繼承

    摘要:那你們肯定會問為什么共用,而沒有共用呢,下面就給你解釋,請看引用類型是共用的值類型是私用的。 引言 面向?qū)ο蟮木幊陶Z言都具繼承這一機制,而 JavaScript 是基于原型(Prototype)面向?qū)ο蟪绦蛟O(shè)計,所以它的實現(xiàn)方式也是基于原型(Prototype)實現(xiàn)的. 繼承的方式 類式繼承 構(gòu)造函數(shù)繼承 組合繼承 原型式繼承 寄生式繼承 寄生組合式繼承 1.類式繼承 //聲明父...

    forsigner 評論0 收藏0
  • javascript面向對象“多態(tài)”

    摘要:之前,本質(zhì)上不能算是一門面向?qū)ο蟮木幊陶Z言,因為它對于封裝繼承多態(tài)這些面向?qū)ο笳Z言的特點并沒有在語言層面上提供原生的支持。所以在中出現(xiàn)了等關(guān)鍵字,解決了面向?qū)ο笾谐霈F(xiàn)了問題。 ES6之前,javascript本質(zhì)上不能算是一門面向?qū)ο蟮木幊陶Z言,因為它對于封裝、繼承、多態(tài)這些面向?qū)ο笳Z言的特點并沒有在語言層面上提供原生的支持。但是,它引入了原型(prototype)的概念,可以讓我們以...

    JerryWangSAP 評論0 收藏0
  • 面向對象JavaScript

    摘要:是完全的面向?qū)ο笳Z言,它們通過類的形式組織函數(shù)和變量,使之不能脫離對象存在。而在基于原型的面向?qū)ο蠓绞街校瑢ο髣t是依靠構(gòu)造器利用原型構(gòu)造出來的。 JavaScript 函數(shù)式腳本語言特性以及其看似隨意的編寫風格,導(dǎo)致長期以來人們對這一門語言的誤解,即認為 JavaScript 不是一門面向?qū)ο蟮恼Z言,或者只是部分具備一些面向?qū)ο蟮奶卣?。本文將回歸面向?qū)ο蟊疽?,從對語言感悟的角度闡述為什...

    novo 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<