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

資訊專(zhuān)欄INFORMATION COLUMN

對(duì)象、原型與原型鏈

浠ラ箍 / 3391人閱讀

摘要:的過(guò)程創(chuàng)建一個(gè)空對(duì)象,讓指向它,通過(guò),等賦值,最終返回。原型和實(shí)例在上面代碼中,是原型,是它的實(shí)例。實(shí)例的對(duì)應(yīng)原型的即所有對(duì)象都是的實(shí)例,并繼承的屬性和方法。這個(gè)串起來(lái)的鏈就是原型鏈。

Object.defineProperty
let obj = {
    key0: 0
}
Object.defineProperty(obj, "key1", {
    value: "1",
    writable: false, // 是否可寫(xiě),默認(rèn)false。obj.key1="1.0"; 不可寫(xiě),不起作用
    configurable: false, // 是否可以再次配置,默認(rèn)false。不能再設(shè)置value,writable,configurable等屬性
    enumerable: false // 是否可枚舉,默認(rèn)false。不能在(for...in)中遍歷
})
console.log(Object.getOwnPropertyDescriptor(obj, "key0")); // {value: 0, writable: true, enumerable: true, configurable: true}
console.log(Object.getOwnPropertyDescriptor(obj, "key1")); // {value: "1", writable: false, enumerable: false, configurable: false}
判斷對(duì)象是否有指定屬性或方法而不是繼承的

obj.hasOwnProperty("toString")

獲取對(duì)象屬性的數(shù)組
Object.getOwnPropertyNames(obj)

Object.keys(obj) // 獲取不到不可枚舉(enumerable: false)的屬性
Object.assign

assign() 用于將所有可枚舉屬性的值從一個(gè)或多個(gè)源對(duì)象復(fù)制到目標(biāo)對(duì)象。同 $.extend();

Object.assign({}, obj); // {key0: "0"}
$.extend({}, obj); // {key0: "0"}
對(duì)象和JSON的轉(zhuǎn)化
let xmObj = {
    name: "xiaoming",
    age: 20,
    sex: "男",
    isMarry: false
}
// 序列化成JSON
var res = JSON.stringify(xmObj, null, "  "); // typeof res == "string"
// 解析成對(duì)象
var resO = JSON.parse(res); // typeof resO == "object"
先看一段代碼
function Person(name, age){
    this.name = name;
    this.age = age;
}
Person.prototype.work=function(){}

function Programmer(name,age){
    Person.call(this,name,age);
}
Programmer.prototype = new Person();
Programmer.prototype.code=function(){}; // 如果寫(xiě)成對(duì)象會(huì)覆蓋繼承來(lái)的屬性和方法,即賦值為{...}。

let example = new Programmer("碼農(nóng)",24); // 創(chuàng)建實(shí)例,example是實(shí)例,Programmer是原型。

Object.prototype.sth = function(){}
new的過(guò)程:創(chuàng)建一個(gè)空對(duì)象,讓this指向它,通過(guò)this.name,this.age等賦值,最終返回this。
原型和實(shí)例

在上面代碼中,Programmer是原型,example是它的實(shí)例。用instanceof檢測(cè),有
example instanceof Programmer === true
example instanceof Person === true
example instanceof Object === true

通過(guò)example.constructor屬性返回對(duì)創(chuàng)建此對(duì)象的數(shù)組函數(shù)的引用。
example.constructor===Person
example.constructor===Person.prototype.constructor
但是constructor 屬性易變,不可信賴(lài),它可以通過(guò)修改prototype而手動(dòng)修改。

實(shí)例的__proto__對(duì)應(yīng)原型的prototype
example.__proto__===Programmer.prototype
example.__proto__.__proto__===Person.prototypeProgrammer.prototype.__proto__
example.__proto__.__proto__.__proto__===Object.prototype
所有對(duì)象都是Object的實(shí)例,并繼承Object.prototype的屬性和方法。

原型鏈

找一個(gè)屬性,首先在example.__proto__去找,如果沒(méi)有,再去example.__proto__.__proto__找,……,再到Object.prototype,一直到null,即Object.prototype.__proto__ === null。這個(gè)串起來(lái)的鏈就是原型鏈。
比如:example.code、example.work、example.doSthexample.toString都有,而example.foo就為undefined。

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

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

相關(guān)文章

  • 《javascript高級(jí)程序設(shè)計(jì)》筆記:原型圖解

    摘要:不理解沒(méi)關(guān)系,下面會(huì)結(jié)合圖例分析上一篇高級(jí)程序設(shè)計(jì)筆記創(chuàng)建對(duì)象下一篇高級(jí)程序設(shè)計(jì)筆記繼承參考之原型鏈的解讀三張圖搞懂的原型對(duì)象與原型鏈繼承與原型鏈 文章直接從原型圖解開(kāi)始的,如果對(duì)一些概念不太清除,可以結(jié)合后面幾節(jié)查看 1. 圖解原型鏈 1.1 鐵三角關(guān)系(重點(diǎn)) function Person() {}; var p = new Person(); showImg(https://s...

    vspiders 評(píng)論0 收藏0
  • 【5】JavaScript 函數(shù)高級(jí)——原型原型深入理解(圖解)

    摘要:探索是如何判斷的表達(dá)式如果函數(shù)的顯式原型對(duì)象在對(duì)象的隱式原型鏈上,返回,否則返回是通過(guò)自己產(chǎn)生的實(shí)例案例案例重要注意的顯示原型和隱式原型是一樣的。面試題測(cè)試題測(cè)試題報(bào)錯(cuò)對(duì)照下圖理解 原型與原型鏈深入理解(圖解) 原型(prototype) 函數(shù)的 prototype 屬性(圖) 每個(gè)函數(shù)都有一個(gè)prototype屬性,它默認(rèn)指向一個(gè)Object空對(duì)象(即稱(chēng)為:原型對(duì)象) 原型對(duì)象中有...

    馬龍駒 評(píng)論0 收藏0
  • 進(jìn)擊JavaScript之(四)原型原型

    摘要:每一個(gè)由構(gòu)造函數(shù)創(chuàng)建的對(duì)象都會(huì)默認(rèn)的連接到該神秘對(duì)象上。在構(gòu)造方法中也具有類(lèi)似的功能,因此也稱(chēng)其為類(lèi)實(shí)例與對(duì)象實(shí)例一般是指某一個(gè)構(gòu)造函數(shù)創(chuàng)建出來(lái)的對(duì)象,我們稱(chēng)為構(gòu)造函數(shù)的實(shí)例實(shí)例就是對(duì)象。表示該原型是與什么構(gòu)造函數(shù)聯(lián)系起來(lái)的。 本文您將看到以下內(nèi)容: 傳統(tǒng)構(gòu)造函數(shù)的問(wèn)題 一些相關(guān)概念 認(rèn)識(shí)原型 構(gòu)造、原型、實(shí)例三角結(jié)構(gòu)圖 對(duì)象的原型鏈 函數(shù)的構(gòu)造函數(shù)Function 一句話說(shuō)明什么...

    XBaron 評(píng)論0 收藏0
  • JavaScript中的原型原型

    摘要:前言作為前端高頻面試題之一,相信很多小伙伴都有遇到過(guò)這個(gè)問(wèn)題。 前言 作為前端高頻面試題之一,相信很多小伙伴都有遇到過(guò)這個(gè)問(wèn)題。那么你是否清楚完整的了解它呢? 國(guó)際慣例,讓我們先拋出問(wèn)題: 什么是原型、原型鏈 它們有什么特點(diǎn) 它們能做什么 怎么確定它們的關(guān)系 或許你已經(jīng)有答案,或許你開(kāi)始有點(diǎn)疑惑,無(wú)論是 get 新技能或是簡(jiǎn)單的溫習(xí)一次,讓我們一起去探究一番吧 如果文章中有出現(xiàn)紕...

    laoLiueizo 評(píng)論0 收藏0
  • 原型一:原型原型

    摘要:說(shuō)白了,原型就是構(gòu)造函數(shù)用來(lái)構(gòu)造新實(shí)例的模板對(duì)象。什么是原型鏈先回答什么是原型。例如這個(gè)原型的原型就是這個(gè)構(gòu)造函數(shù)的,既這個(gè)原型對(duì)象。這些原型對(duì)象通過(guò)像鏈子一樣連起來(lái),就叫做原型鏈。 原型鏈初步學(xué)習(xí) 這篇博客只是我初步理解原型鏈的一個(gè)個(gè)人學(xué)習(xí)筆記,寫(xiě)的比較粗略,且有的地方可能理解錯(cuò)誤. 更多更專(zhuān)業(yè)的關(guān)于原型鏈的解釋請(qǐng)看JavaScript深入之從原型到原型鏈和阮一峰的博客:Javas...

    MudOnTire 評(píng)論0 收藏0
  • 原型原型理解

    原型與原型鏈理解 1. 什么是原型 JavaScript是一種簡(jiǎn)易的腳本語(yǔ)言,其是由對(duì)象構(gòu)成。每一個(gè)JavaScript對(duì)象(除null外)都和另一個(gè)對(duì)象相關(guān)聯(lián),另一個(gè)對(duì)象就是原型。也就是說(shuō),任何一個(gè)對(duì)象都有原型這個(gè)屬性。 隱式原型(_proto_):上面說(shuō)的這個(gè)原型是JavaScript中的內(nèi)置屬性[[prototype]],此屬性繼承自object對(duì)象,在腳本中沒(méi)有標(biāo)準(zhǔn)的方式訪問(wèn)[[pro...

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

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

0條評(píng)論

浠ラ箍

|高級(jí)講師

TA的文章

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