日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js学习日记-new Object和Object.create到底干了啥

發(fā)布時(shí)間:2024/8/26 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js学习日记-new Object和Object.create到底干了啥 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
function Car () {this.color = "red"; } Car.prototype.sayHi=function(){console.log('你好') }
var car =new Car(); var car2 = Object.create(Car);

new XXX()時(shí)發(fā)生了什么?

var obj={}; obj.__proto=Car.prototype Car.call(obj)

第一步,創(chuàng)建了一個(gè)空對(duì)象obj
第二步,將空對(duì)象的__proto__成員指向了Car函數(shù)的原型屬性,該原型屬性是一個(gè)原型對(duì)象,也就意味著obj的原型屬性上擁有了Car.prototype中的屬性或方法

第三步,將Car函數(shù)中的this指針指向obj,obj有了Car構(gòu)造函數(shù)中的屬性或方法 ,然后Car函數(shù)無返回值或返回的不是對(duì)象,直接返回obj,否則返回Car函數(shù)中的對(duì)象


?

tip:__proto__是什么

每個(gè)對(duì)象都有一個(gè)[[prototype]}屬性,這個(gè)屬性是隱藏屬性,誰創(chuàng)建了它,該屬性就指向誰的prototype屬性,因?yàn)槭请[藏屬性,不能直接訪問,所以有的瀏覽器提供了一個(gè)__proto__屬性來訪問,然而這不是一個(gè)標(biāo)準(zhǔn)的訪問方法,所以ES5中用Object.getPrototypeOf函數(shù)獲得一個(gè)對(duì)象的[[prototype]]。ES6中,使用Object.setPrototypeOf可以直接修改一個(gè)對(duì)象的[[prototype]]

Object.create時(shí)發(fā)生了什么?

Object.create()方法創(chuàng)建一個(gè)新對(duì)象,并使用現(xiàn)有的對(duì)象來提供新創(chuàng)建的對(duì)象的__proto__,關(guān)鍵代碼如下

關(guān)鍵代碼如下:

Object.create = function (o) {var F = function () {};F.prototype = o;var newObj=new F();return newObj; };

可以看到Object.create內(nèi)部創(chuàng)建了一個(gè)新對(duì)象newObj,默認(rèn)情況下newObj.__proto__== F.prototype,在本例中則重寫了構(gòu)造函數(shù)F的原型屬性,最終的原型關(guān)系鏈為newObj.__proto__== F.prototype == o

如果現(xiàn)有的對(duì)象是一個(gè)構(gòu)造函數(shù),即var car2=Object.create(Car)會(huì)發(fā)生什么呢?

console.log(car2.color) //undefined console.log(car2.sayHi()) //undefined

執(zhí)行代碼發(fā)現(xiàn)都是undefined,?為什么會(huì)這樣呢?

問題1:因?yàn)镺bject.create內(nèi)部的新對(duì)象是new F()創(chuàng)建的,跟Car構(gòu)造函數(shù)沒有半毛錢的關(guān)系,所以自然不能訪問到Car中的屬性了

問題2:調(diào)用car2.sayHi()時(shí)首先判斷car2對(duì)象有沒有相應(yīng)的方法,如果沒有,則查找car2的原型鏈上有沒有該方法,car2的原型屬性是Car構(gòu)造函數(shù)(可以通過car2.__proto__來證明),構(gòu)造函數(shù)沒有sayHi方法,自然也就是undefined了。

那如果將var car2=Object.create(car)又發(fā)生了什么呢?

function Car () {this.color = "red";this.person={name:'張三'} } Car.prototype.sayHi=function(){console.log('你好') } var car =new Car(); var car2 = Object.create(car); car2.person.name ='李四' console.log(`car是${car.person.name},car2是${car2.person.name}`)

相當(dāng)于實(shí)現(xiàn)了原型繼承方式(注意不是原型鏈繼承),本質(zhì)上來說是對(duì)一個(gè)對(duì)象進(jìn)行了淺拷貝??


最終結(jié)論:

1.?Object.create(o),如果o是一個(gè)構(gòu)造函數(shù),則采用這種方法來創(chuàng)建對(duì)像沒有意義

2.Object.create(o),如果o是一個(gè)字面量對(duì)象或?qū)嵗龑?duì)象,那么相當(dāng)于是實(shí)現(xiàn)了對(duì)象的淺拷貝

轉(zhuǎn)載于:https://www.cnblogs.com/94pm/p/9113434.html

總結(jié)

以上是生活随笔為你收集整理的js学习日记-new Object和Object.create到底干了啥的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美xx视频 | 久久av中文字幕 | 欧美精品99| 久久传媒| 日韩黄色av网站 | 美女啪啪无遮挡 | 欧美激情三级 | 野外吮她的花蒂高h在线观看 | 日韩一区二区三区在线免费观看 | 亚洲产国偷v产偷v自拍涩爱 | 欧美一区二区三区视频在线观看 | 国产精品黄色在线观看 | 黑丝美女啪啪 | 女性向av免费网站 | 午夜美女在线 | 亚洲啪av永久无码精品放毛片 | 羞羞答答av | 黄色一区二区视频 | 国产一区二区三区四区在线观看 | 成人国产a| 色综合色综合 | 久久免费视频精品 | 欧美激情免费在线观看 | 学生调教贱奴丨vk | 老熟女重囗味hdxx69 | 天堂久久精品 | 国产高清一区二区三区四区 | 欧美性猛交bbbbb精品 | 最新高清无码专区 | 欧美第一色 | 尤物193.com | 欧美性受xxxx狂喷水 | 人成网站在线观看 | 国产免费av一区 | 久久疯狂做爰流白浆xx | 国产毛片一区二区三区 | 午夜怡红院 | 黄色三级片毛片 | 2019最新中文字幕 | 亚洲精品天天 | 拍摄av现场失控高潮数次 | 女同性恋一区二区三区 | 一二三区精品视频 | 亚洲人成无码网站久久99热国产 | 欧美精品videos | 亚洲一区二区在线看 | 国产成人一区在线观看 | av首页在线 | 欧美人与性囗牲恔配 | 亚洲女女做受ⅹxx高潮 | 色精品视频 | 中文字幕在线视频免费 | 国产精品高清无码在线观看 | 国产无套免费网站69 | kendra lust free xxx | 成人精品视频网站 | 成人午夜免费福利视频 | 720url在线观看免费版 | 精品日韩在线视频 | 久久久久久久久网站 | 久久久久久久国产精品毛片 | 自偷自拍av | 欧美精品成人一区二区在线观看 | 91美女视频 | 不卡视频在线播放 | 国产中文在线 | 丰满大肥婆肥奶大屁股 | 色一情一乱一乱一区91av | 一级v片 | 亚洲美女屁股眼交3 | 亚洲国产综合视频 | 中国一级黄色 | 97人人澡 | 国产色片在线观看 | 国产高清视频在线免费观看 | 国产成人资源 | 东京热一本视频一区 | 免费在线一区二区 | 熟妇人妻精品一区二区三区视频 | 在线免费观看黄色av | 欧美成人国产精品一区二区 | 国产乱人对白 | 国产精品人人妻人人爽 | 最新国产在线 | 先锋影音一区二区 | 国产网址 | 黄色激情视频在线观看 | 日日摸天天爽天天爽视频 | 欧美性猛交乱大交3 | 亚洲日本欧美 | 奇米激情 | 国产精品一区二 | 久久精品国产久精国产 | 国产一区在线不卡 | 久久亚洲aⅴ无码精品 | 琪琪色网 | 男生和女生靠逼视频 | 日韩免费观看av | av不卡免费在线观看 |