成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript原型繼承之基礎(chǔ)機(jī)制

開(kāi)發(fā) 前端
由于語(yǔ)言設(shè)計(jì)上的原因,JavaScript 沒(méi)有真正意義上“類(lèi)”的概念。而通常使用的 new 命令實(shí)例化對(duì)象的方法,其實(shí)是對(duì)原型對(duì)象的實(shí)例化。這一語(yǔ)言功能的本質(zhì)依賴(lài)于 JavaScript 特有的原型鏈(prototype chain)模式。

由于語(yǔ)言設(shè)計(jì)上的原因,JavaScript 沒(méi)有真正意義上“類(lèi)”的概念。而通常使用的 new 命令實(shí)例化對(duì)象的方法,其實(shí)是對(duì)原型對(duì)象的實(shí)例化。這一語(yǔ)言功能的本質(zhì)依賴(lài)于 JavaScript 特有的原型鏈(prototype chain)模式。

所以嚴(yán)格意義上說(shuō),JavaScript 是基于原型的面向?qū)ο笳Z(yǔ)言。也就是說(shuō),每個(gè)實(shí)例對(duì)象都具有一個(gè)原型。對(duì)象從該原型中繼承屬性和方法。

1、構(gòu)造函數(shù)

利用構(gòu)造函數(shù),可以簡(jiǎn)單地創(chuàng)建對(duì)象。構(gòu)造函數(shù)內(nèi)的 this 關(guān)鍵字指向?qū)嵗龑?duì)象本身:

  1. function People(name){  
  2.     this.name = name;  

使用 new 運(yùn)算符和構(gòu)造函數(shù)創(chuàng)建實(shí)例對(duì)象:

  1. var people = new People('小明');  
  2. console.log(people.name); //小明 

但如果創(chuàng)建了兩個(gè)實(shí)例,這兩個(gè)實(shí)例之間無(wú)法直接共享屬性和方法:

  1. var people1 = new People('小明');  
  2. var people2 = new People('小王');  
  3. people1.sex = 'male';  
  4. console.log(people2.sex); //undefined 

也就是說(shuō)對(duì)象一旦被實(shí)例化,其屬性方法都獨(dú)立存在,對(duì)某個(gè)屬性的修改不會(huì)影響到其他實(shí)例。

2、Prototype

于是就有了 prototype 屬性,這個(gè)屬性是在生成實(shí)例對(duì)象時(shí)自動(dòng)創(chuàng)建的。它本身又是一個(gè)對(duì)象,擁有能夠在實(shí)例間共享的屬性和方法。而實(shí)例本身的屬性和方法,則包含在構(gòu)造函數(shù)中。換句話說(shuō),構(gòu)造函數(shù)內(nèi)部的屬性和方法,在經(jīng)過(guò)實(shí)例化后都成為了本地的屬性和方法,而原型(prototype)中的屬性和方法在實(shí)例中只是一種引用,因此能夠被多個(gè)實(shí)例共享。

還是剛才那個(gè)構(gòu)造函數(shù),現(xiàn)在為它增加 prototype 屬性:

  1. People.prototype.sex = 'female';  
  2. //或者寫(xiě)成 People.prototype = {sex: 'female'};  
  3. console.log(people1.sex); //male  
  4. console.log(people2.sex); //female 

People 構(gòu)造函數(shù)的 prototype 屬性參數(shù)會(huì)直接影響到 people1 和 people2 兩個(gè)實(shí)例。

但為什么 people1.sex 輸出 male 呢?這是由于在 JavaScript 中,原型關(guān)系以遞歸形式存在。對(duì)象的原型也是一個(gè)對(duì)象,而原型的本身也可能具有一個(gè)原型。原型的最高層級(jí)是全局的 Object 對(duì)象。

這就是說(shuō),一旦 people1.sex 被設(shè)置為 male 后,它在原型中對(duì)應(yīng)的值就無(wú)法被暴露出來(lái)。假如 people1.sex 本身沒(méi)有值,才會(huì)從構(gòu)造函數(shù)的 prototype 屬性中讀取,以此類(lèi)推一級(jí)一級(jí)向上查找,直到 Object 對(duì)象。

注:使用 “null” 給對(duì)象賦值,可以銷(xiāo)毀自定義對(duì)象,釋放內(nèi)存資源。

原文:http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/

【編輯推薦】

  1. 10個(gè)頂級(jí)Web移動(dòng)開(kāi)發(fā)JavaScript框架推薦
  2. 微軟雄心勃勃,意欲將JavaScript打造成次世代贏家
  3. JavaScript入門(mén)之事件、cookie、定時(shí)等
  4. JavaScript入門(mén)之語(yǔ)言基礎(chǔ)
  5. 7個(gè)優(yōu)秀的JavaScript資源推薦
責(zé)任編輯:陳貽新 來(lái)源: 芒果
相關(guān)推薦

2011-08-24 13:56:27

JavaScript

2011-08-31 14:48:33

JavaScript

2013-09-18 14:01:46

JavaScript

2016-12-27 09:10:29

JavaScript原型鏈繼承

2020-04-29 14:40:19

JavaScript繼承編程語(yǔ)言

2010-10-08 09:13:15

oop模式JavaScript

2017-04-07 11:15:49

原型鏈原型Javascript

2020-10-20 08:35:34

JS基礎(chǔ)進(jìn)階

2011-06-07 08:58:31

javascript

2012-01-05 15:07:11

JavaScript

2020-11-30 07:59:59

JavaScript語(yǔ)言原型

2020-02-20 14:00:15

JavaScript原型原型鏈

2023-08-28 07:12:54

2011-08-10 17:04:43

JavaScript

2019-02-27 16:00:48

JS原型原型鏈對(duì)象

2016-06-07 14:28:39

Javascript原型

2022-05-26 09:20:01

JavaScript原型原型鏈

2012-02-14 09:45:02

JavaScript

2022-06-20 09:22:55

js原型鏈前端

2022-10-21 14:12:06

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品免费看 | 国产小视频在线观看 | 一区二区三区欧美在线观看 | 国产激情一区二区三区 | 亚洲人成人一区二区在线观看 | 国产精品污www一区二区三区 | 日韩一区中文字幕 | 一区二区三区四区免费在线观看 | 欧美五月婷婷 | 精品在线观看一区 | 国产成人免费视频网站高清观看视频 | 国产精品毛片一区二区在线看 | 久久在线看 | 综合第一页 | 国产日韩视频 | 日韩h | 欧美日韩在线播放 | 天天干天天插天天 | 欧美黑人一区 | 天堂网av在线 | 一区二区三区四区不卡视频 | 久久久91精品国产一区二区精品 | 中文字幕第一页在线 | 2019天天操| 国产一区二区在线观看视频 | 91精品国产综合久久久亚洲 | 涩在线 | 中文字幕第一页在线 | 欧美成人精品激情在线观看 | 国产精品一区二区三区四区 | 在线欧美一区二区 | 伊人影院在线观看 | 日本三级视频 | 亚洲一一在线 | 久久久精 | 国产特级毛片aaaaaa喷潮 | 成人伊人| 色婷婷久久久亚洲一区二区三区 | 草b视频 | 中文字幕欧美日韩一区 | 国产成人免费视频 |