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

資訊專欄INFORMATION COLUMN

【JavaScript】面向?qū)ο笾?

Cristalven / 2233人閱讀

摘要:一原型概括原型是什么對(duì)象包含數(shù)學(xué)方法的函數(shù),函數(shù)定義在屬性,初始值為一個(gè)空對(duì)象原型的屬性和方法不會(huì)影響函數(shù)自身的屬性和方法類型的屬性所有函數(shù)都具有的屬性定義函數(shù)原型的默認(rèn)值是空對(duì)象函數(shù)包含構(gòu)造函數(shù)所有引用類型其實(shí)都是構(gòu)造函數(shù)獲取原型通過(guò)

JS(JavaScript)
一.原型
1.概括

原型是什么

Function對(duì)象包含數(shù)學(xué)方法的函數(shù),函數(shù)定義在protoype屬性,初始值為一個(gè)空對(duì)象
原型的屬性和方法不會(huì)影響函數(shù)自身的屬性和方法

// Function類型的屬性 -> 所有函數(shù)都具有的屬性
console.log(Function.prototype);
// 定義函數(shù)
function fn(){
    console.log("this is function");
}
// 原型的默認(rèn)值是空對(duì)象
console.log(fn.prototype);
// 函數(shù)包含構(gòu)造函數(shù) -> 所有引用類型其實(shí)都是構(gòu)造函數(shù)
console.log(Number.prototype);
console.log(Object.prototype);
var result = Object.getOwnPropertyDescriptor(Object.prototype, "constructor");
console.log(result);

獲取原型

通過(guò)兩種方式,來(lái)設(shè)置共存的屬性和方法
構(gòu)造函數(shù)的prototype屬性
Object對(duì)象的getPrototype

function fn(){
    console.log("this is function");
}
// 使用訪問(wèn)對(duì)象的屬性語(yǔ)法結(jié)構(gòu)
console.log(fn.prototype);
console.log(fn["prototype"]);
// Object類型提供getPrototypeOf()方法
console.log(Object.getPrototypeOf(fn));

原型的屬性和方法

通過(guò)一下兩種方式
多帶帶定義原型的屬性和方法
直接型定義個(gè)新對(duì)象

function fn(){
    console.log("this is function");
}
// 變量proto也是一個(gè)空對(duì)象
// var proto = fn.prototype;

// 新增屬性或方法
// proto.name = "犬夜叉";
fn.prototype.name = "犬夜叉";
console.log(fn.prototype);
// defineProperty()
Object.defineProperty(fn.prototype, "age", {
    value : 18,
    enumerable : true
});
console.log(fn.prototype);

2.原型屬性

自有屬性與原型屬性

自有屬性;對(duì)象引用增加屬性,獨(dú)立的屬性函數(shù)本身的屬性
原型屬性;通過(guò)新增屬性和方法并定義原型的屬性

// 定義構(gòu)造函數(shù)
function Hero(name){
    // 構(gòu)造函數(shù)本身的屬性 -> 自有屬性
    this.name = name;
    this.sayMe = function(){
        console.log("this is function");
    }
}
// 通過(guò)構(gòu)造函數(shù)Hero的prototype新增屬性或方法
// 通過(guò)原型所定義的屬性 -> 原型屬性
Hero.prototype.age = 18;
/*
    通過(guò)構(gòu)造函數(shù)Hero創(chuàng)建對(duì)象時(shí)
    * 不僅具有構(gòu)造函數(shù)的自有屬性
    * 還具有構(gòu)造函數(shù)的原型屬性
 */
var hero = new Hero("犬夜叉");

console.log(hero.name);// 犬夜叉
console.log(hero.age);// 16

var hero2 = new Hero("桔梗");
console.log(hero2.name);// 桔梗
console.log(hero2.age);// 16
// 為對(duì)象hero新增age屬性
// hero.age = 80;
// console.log(hero.age);// 80
//
// console.log(hero);
//
// console.log(hero2.age);// 16

Hero.prototype.age = 80;

console.log(hero.age);
console.log(hero2.age);

檢測(cè)自有或原型屬性

有兩種方式以hasOwnPrototype()來(lái)檢測(cè)對(duì)象是否指定自有屬性
以in關(guān)鍵字檢測(cè)對(duì)象及原型鏈?zhǔn)欠裼袑傩?/p>

function Hero(){
    // this.name = "犬夜叉";// 自有屬性
}
// Hero.prototype.name = "桔梗";

var hero = new Hero();
/*
  Object.hasOwnProperty(prop)方法
  判斷當(dāng)前指定屬性是否為自有屬性
  
  prop - 表示指定屬性名稱
  返回值 - 布爾值
  true - 表示存在指定的自有屬性
  false - 表示不存在指定的自有屬性
 */
// console.log(hero.hasOwnProperty("name"));// true
/*
  使用in關(guān)鍵字檢測(cè)對(duì)象的屬性
  作用 - 判斷對(duì)象中是否存在指定屬性(自有屬性或原型屬性)
  返回值 - 布爾值
  true - 表示存在指定的屬性
  false - 表示不存在指定的屬性
 */
console.log("name" in hero);

擴(kuò)展屬性或方法

以原型設(shè)置指定構(gòu)造函數(shù)和對(duì)象擴(kuò)展其屬性和方法

Object.prototype.sayMe = function () {
    console.log("you my sayMe function")
}
var obj = new Object();

obj.sayMe();

Array.prototype.inArray = function (color) {

    for(var i = 0, len = this.length; i < len; i++){
        if(this[i] === color){
            return true;
        }
    }
    return false;
}
var arr = ["red", "green","blue"];
console.log(arr.inArray("yellow"));
console.log(arr.inArray("red"));

重寫(xiě)原型屬性

將構(gòu)造函數(shù)和對(duì)象,以自有屬性重寫(xiě)遠(yuǎn)得屬性

//定義構(gòu)造函數(shù)
function Hero() {
    this.name = "犬夜叉"
}
Hero.prototype.name = "桔梗";
//構(gòu)造函數(shù)原型
var hero = new Hero();
// 構(gòu)造函數(shù)創(chuàng)建對(duì)象
console.log(hero.name);//犬夜叉
//自有屬性與原型屬性同名,默認(rèn)訪問(wèn)是自有屬性,自有屬性優(yōu)先級(jí)別高于原型屬性
delete hero.name;
//刪除對(duì)象屬性
console.log(hero.name);//桔梗
//重新訪問(wèn)對(duì)象屬性

isPrototypeOF()方法

//通過(guò)初始化方式定義對(duì)象
var obj = {
    name : "犬夜叉"
}
function Hero() {}
//定義構(gòu)造函數(shù)
Hero.prototype = obj;
//將對(duì)象obj賦值給構(gòu)造函數(shù)Hero原型
var hero = new Hero();
//通過(guò)構(gòu)造函數(shù)創(chuàng)建對(duì)象
var result = obj.isPrototypeOf(hero);
//判斷指定對(duì)象是否是另一個(gè)對(duì)象原型
console.log(result);

3.擴(kuò)展內(nèi)建對(duì)象
內(nèi)置對(duì)象的prototype屬性設(shè)置擴(kuò)展屬性和方法

Object.prototype.sayMe = function () {
    console.log("you my sayMe function")
}
var obj = new Object();

obj.sayMe();

Array.prototype.inArray = function (color) {

    for(var i = 0, len = this.length; i < len; i++){
        if(this[i] === color){
            return true;
        }
    }
    return false;
}
var arr = ["red", "green","blue"];
console.log(arr.inArray("yellow"));
console.log(arr.inArray("red"));

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

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

相關(guān)文章

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

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

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

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

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

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

    AaronYuan 評(píng)論0 收藏0
  • 面向對(duì)象JavaScript繼承(一) 類式繼承

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

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

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

    JerryWangSAP 評(píng)論0 收藏0
  • 面向對(duì)象JavaScript

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

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

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

0條評(píng)論

閱讀需要支付1元查看
<