最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于js中的原型、繼承的一些想法

 更新時(shí)間:2016年08月10日 09:14:41   投稿:jingxian  
下面小編就為大家?guī)硪黄趈s中的原型、繼承的一些想法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

最近看到一個(gè)別人寫的js類庫,突然對js中的原型及繼承產(chǎn)生了一些想法,之前也看過其中的一些內(nèi)容,但是總不是很清晰,這幾天利用空閑時(shí)間,對這塊理解了一下,感覺還是有不通之處,思路上沒那么條理,僅作為分享,

一、instanceof

在JavaScript有instanceof運(yùn)算符,是二元運(yùn)算符,使用方法 instanceA instanceof A,返回值是布爾值(boolean),含義是判斷instanceA是否是A的一個(gè)實(shí)例,其實(shí)質(zhì)是判斷A.prototype===instanceA.__proto__,如

function f2(){
  var f=function(){}
  var test=new f();
  console.log(test instanceof f);//true
  console.log((f.prototype===test.__proto__));//true
}

上邊的兩個(gè)打印都是true。說明test是f的一個(gè)實(shí)例;test的__proto__屬性指向了f的prototype對象,即f的prototype屬性是一個(gè)對象,且此對象是f的一個(gè)實(shí)例。

二、js中對象

在js中一切皆是對象,對象分為函數(shù)對象和普通對象,常用的函數(shù)其實(shí)是函數(shù)對象,如

//函數(shù)對象
  var f=function(){}
  var f2=new Function('str','console.log(str)')
  function f3(){}
  //普通對象
  var o=new Object();
  var o2={}
  var o3=new f()

上面看到f、f2、f3是函數(shù)對象,o、o2、o3是普通對象。

函數(shù)對象和普通對象的區(qū)別:

所有使用new Function()的方式創(chuàng)建的對象都是函數(shù)對象,f和f3兩種方式,最終是也是使用new Function()方式創(chuàng)建的;

在定義一個(gè)對象時(shí),對象中包含一些預(yù)定義的屬性,如,prototype、__proto__,其中prototype屬性只有函數(shù)對象才有,__proto__則是對所有的對象都有,所以可以通過對象的__proto__屬性判斷一個(gè)對象是函數(shù)對象還是普通對象,如

//函數(shù)對象
  var f=function(){}
  //普通對象
  var o=new Object();
  console.log(f.prototype);//Object {}
  console.log(o.prototype);//undefined

從上邊可以得出函數(shù)對象存在prototype屬性,而普通對象的prototype對象則是未定義。

三、原型鏈

從上邊知道所有的對象都有一個(gè)__proto__屬性,這個(gè)屬性指向創(chuàng)建它的函數(shù)對象的原型對象prototype,我們把這種使用__proto__屬性串起來的鏈叫做原型鏈,如下面是一個(gè)原型鏈,

上圖,以person為例,說明原型鏈,

var person=function(){}
var person1=new person();

1、person是一個(gè)函數(shù)對象,person1是person的一個(gè)實(shí)例

2、person1的__proto__屬性是person的原型對象person.prototype

3、由于person的原型對象person.prototype是一個(gè)對象,它也有一個(gè)__proto__屬性,這個(gè)屬性指向的Object的原型對象Object.prototype

4、Object的原型對象Object.prototype是一個(gè)對象,它也有一個(gè)__proto__屬性,這個(gè)屬性的原型對象為null。

四、一些繼承

在js中我們會(huì)定義一個(gè)函數(shù)對象,如

var person=function(){}

上面我們定義了一個(gè)函數(shù)對象,它沒有任何的屬性,是一個(gè)空對象,由于它是一個(gè)對象,所以可以為它增加屬性,

var person=function(){}
person.name1='js'
console.log(person.name1)//js

上面的代碼為person新增了一個(gè)name屬性,且賦值為js,且可以打印出name屬性的值
但是當(dāng)我們創(chuàng)建一個(gè)person的實(shí)例person1的時(shí)候,如下

var person= function(){};
  person.name1= 122;
  console.log(person.name1);
  var person1=new person();
  console.log(person1.name1);//undefined

可以看到person1沒有name1這個(gè)屬性,那么如何才能保證person的實(shí)例也有name1屬性呢,

var person= function(){};
  person.name1= 122;
  //使用prototype對象為對象添加屬性,這樣所以的實(shí)例都會(huì)有此屬性
  person.prototype.name1='12';
  console.log(person.name1);
  var person1=new person();
  console.log(person1.name1);//12

上面,使用了person.protoype.name1='12',這樣所有的實(shí)例都有了name1屬性,使用這種方式添加的屬性,在生成實(shí)例的時(shí)候會(huì)把屬性當(dāng)作實(shí)例的共有屬性。

以上這篇基于js中的原型、繼承的一些想法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • !DOCTYPE聲明對JavaScript的影響分析

    !DOCTYPE聲明對JavaScript的影響分析

    DOCTYPE是document type(文檔類型)的簡寫,在web設(shè)計(jì)中用來說明你用的XHTML或者HTML是什么版本。
    2010-04-04
  • javascript之鎖定表格欄位

    javascript之鎖定表格欄位

    javascript之鎖定表格欄位...
    2007-06-06
  • JavaScript數(shù)組隨機(jī)排列實(shí)現(xiàn)隨機(jī)洗牌功能

    JavaScript數(shù)組隨機(jī)排列實(shí)現(xiàn)隨機(jī)洗牌功能

    這篇文章主要介紹了JavaScript數(shù)組隨機(jī)排列實(shí)現(xiàn)隨機(jī)洗牌功能的方法,涉及javascript中基于list.sort方法實(shí)現(xiàn)數(shù)組隨機(jī)排列的技巧,可應(yīng)用于隨機(jī)洗牌,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03
  • 判斷日期是否能跨月查詢的js代碼

    判斷日期是否能跨月查詢的js代碼

    本節(jié)主要介紹了用js判斷日期是否能跨月查詢,需要的朋友可以參考下
    2014-07-07
  • vue3 uniapp微信登錄功能實(shí)現(xiàn)

    vue3 uniapp微信登錄功能實(shí)現(xiàn)

    根據(jù)最新的微信小程序官方的規(guī)定,uniapp中的uni.getUserInfo方法不再返回用戶頭像和昵稱、以及手機(jī)號,這篇文章主要介紹了vue3 uniapp微信登錄功能實(shí)現(xiàn),需要的朋友可以參考下
    2024-04-04
  • JSON簡介以及用法匯總

    JSON簡介以及用法匯總

    JSON(JavaScript Object Notation)即JavaScript對象表示法,是一種輕量級的數(shù)據(jù)交換格式。它非常便于編程人員對數(shù)據(jù)的處理,也便于機(jī)器對數(shù)據(jù)的解析和生成,應(yīng)用非常廣泛
    2016-02-02
  • 改進(jìn):論壇UBB代碼自動(dòng)插入方式

    改進(jìn):論壇UBB代碼自動(dòng)插入方式

    改進(jìn):論壇UBB代碼自動(dòng)插入方式...
    2006-12-12
  • swiperjs實(shí)現(xiàn)導(dǎo)航與tab頁的聯(lián)動(dòng)

    swiperjs實(shí)現(xiàn)導(dǎo)航與tab頁的聯(lián)動(dòng)

    這篇文章主要為大家詳細(xì)介紹了swiperjs實(shí)現(xiàn)導(dǎo)航與tab頁的聯(lián)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • JavaScript隱式類型轉(zhuǎn)換

    JavaScript隱式類型轉(zhuǎn)換

    JavaScript的數(shù)據(jù)類型是非常弱的(不然不會(huì)叫它做弱類型語言了)!在使用算術(shù)運(yùn)算符時(shí),運(yùn)算符兩邊的數(shù)據(jù)類型可以是任意的,比如,一個(gè)字符串可以和數(shù)字相加
    2016-03-03
  • 動(dòng)態(tài)加載、移除js/css文件的示例代碼

    動(dòng)態(tài)加載、移除js/css文件的示例代碼

    本文簡單介紹動(dòng)態(tài)加載、移除、替換js/css文件的示例代碼,代碼簡單易懂,非常不錯(cuò),具有參考借鑒加載,需要的朋友參考下吧
    2018-03-03

最新評論

武胜县| 林口县| 临邑县| 区。| 兴义市| 遵化市| 临西县| 绥中县| 淅川县| 综艺| 虎林市| 澄江县| 蒲城县| 镇赉县| 许昌县| 云阳县| 喜德县| 尼玛县| 巴林左旗| 河北省| 全椒县| 武夷山市| 潮州市| 津市市| 礼泉县| 曲靖市| 达孜县| 隆化县| 高阳县| 定州市| 商河县| 嘉峪关市| 微山县| 庆阳市| 鲁甸县| 吴旗县| 磐安县| 高雄县| 肇庆市| 图片| 襄垣县|