第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

請問老師new Object()和Object.create()兩者有何異同?

創(chuàng)建對象時,new Object()和Object.create()兩者有何異同?

正在回答

11 回答

Object.create() 是E5的一個新特性哦,其實可以理解為繼承一個對象,create方法有兩個參數(shù)

一個是要繼承的對象的原型,如果沒有就傳null,第二個參數(shù)是對象的屬性描述符,這些都是E5才有的~

//?Demo
var?a?=?new?Object();??//?創(chuàng)建一個對象,沒有父類哦

var?b?=?Object.create(a.prototype);??//?b?繼承了a的原型

具體對象的原型,屬性描述符這些概念可以先去百度學(xué)習(xí)下哈。我就不詳細(xì)說了,希望能幫到你

3 回復(fù) 有任何疑惑可以回復(fù)我~
#1

helloap 提問者

非常感謝!
2016-05-12 回復(fù) 有任何疑惑可以回復(fù)我~
#2

zhangcl

上面說錯了: 第一種: var a = {x:1}; var b = Object.create(a); console.log(b);//輸出:{}; console.log(b.__proto__);//輸出:{x:1} 第二種: 如果用 b =new object(a) connsole.log(b);//輸出:{x:1} congsole.log(b.__proto__);//輸出:{} 只要注意區(qū)分__proto__和prototype就可以了,希望對你有幫助
2016-06-04 回復(fù) 有任何疑惑可以回復(fù)我~
#3

zhangcl 回復(fù) helloap 提問者

所以 var b = Object.create(a.prototype); // b 繼承了a的原型 這個說法是錯誤的,應(yīng)該是b.__proto__=== a.prototype,嚴(yán)格等于 結(jié)論:b的原型指向a的prototype屬性
2016-06-04 回復(fù) 有任何疑惑可以回復(fù)我~
#4

真的是超神哥 回復(fù) zhangcl

這個回復(fù)比較靠譜。+1
2017-03-11 回復(fù) 有任何疑惑可以回復(fù)我~
#5

慕UI5536701 回復(fù) zhangcl

特意注冊了個賬號來回復(fù)...糾正你說的一些錯誤說法.1:"b的原型",因為b是實例,而非構(gòu)造函數(shù),所以無原型一說;2:"b.__proto__",這表示b的構(gòu)造函數(shù)的原型,俗稱原型鏈,層主說的"b繼承了a的原型"是沒毛病的 建議你多了解一下js的原型和原型鏈指向圖
2017-06-27 回復(fù) 有任何疑惑可以回復(fù)我~
#6

慕UI5536701 回復(fù) 慕UI5536701

層主也寫錯了,a是普通對象,不存在prototype值,所以下面一句會報錯,應(yīng)該寫成"var b = Object.create(a)",即b繼承a,因為a在b的原型鏈上
2017-06-27 回復(fù) 有任何疑惑可以回復(fù)我~
查看3條回復(fù)

請教下你們怎么懂這些的,我學(xué)著很累,聽不懂,咋辦

0 回復(fù) 有任何疑惑可以回復(fù)我~

http://img1.sycdn.imooc.com//599aae080001a69403120171.jpg

使用new Object()創(chuàng)建出來的對象和傳入的參數(shù)對象是恒等的

0 回復(fù) 有任何疑惑可以回復(fù)我~

http://img1.sycdn.imooc.com//5955be8400014eb407160707.jpg

詳情解說,看圖。

2 回復(fù) 有任何疑惑可以回復(fù)我~
#1

慕俠4705823

這里b是一個實例,是沒有prototype的,只有一個內(nèi)部指針,指向構(gòu)造函數(shù)的原型,可以使用b._proto_ === a1訪問,這里b.prototype是因為b繼承了a1,而a1是一個函數(shù),有一個prototype屬性,b也繼承了該屬性
2018-04-04 回復(fù) 有任何疑惑可以回復(fù)我~
var?a={};
var?a=new?Object();
var?a=Object.create(Object.prototype);

以上三者相同。

0 回復(fù) 有任何疑惑可以回復(fù)我~

回復(fù) zhangcl:挖墳說一下。首先,var a=new Object();a是構(gòu)造函數(shù)Object創(chuàng)建的對象。所以,a不存在prototype屬性。只有函數(shù)存在prototype屬性,而任何被創(chuàng)建的對象,包括函數(shù)都有一個__proto__屬性,構(gòu)成了對象的原型鏈。所以var b = Object.create(a.prototype); 這句話就是錯的。a.prototype根本不存在。alert一下顯示undifined。這句話直接寫成var b=Object.create(a);就可以了。b的原型對象是a。Object.creat的實現(xiàn)就像樓上說的。而假如像樓上所說,第二句想寫出 var b=Object.create(a.constructor.prototype)。那么a.constructor.prototype=Object.prototype。實際上第二句就和var b=new Object()差不多了。但是還是存在點小問題。因為Object.create的實現(xiàn)類似于:

//Object.create(Object.prototype)
function?fn(){};
fn.prototype=Object.prototype;
return?new?fn();

所以,?var b=Object.create(a.constructor.prototype);這句b雖然是Object的對象,卻沒有被構(gòu)造函數(shù)Object初始化。就這點小區(qū)別。不知道我理解的對不對。

1 回復(fù) 有任何疑惑可以回復(fù)我~

簡單來講,new Object()是一種通過構(gòu)造函數(shù)來創(chuàng)建object的方式,而Object.create(proto, [ propertiesObject ])
不需要通過構(gòu)造函數(shù)就可以創(chuàng)建一個object,Object.create()的第一個參數(shù)是必須要的,第二個參數(shù)可選。其實Object.create()內(nèi)部依然是通過new一個構(gòu)造函數(shù)的方式來實現(xiàn)的,它有構(gòu)造函數(shù),不過這個構(gòu)造函數(shù)是隱式存在的,看一下使老舊瀏覽器支持Object.create方法的“polyfill”就可以對它們之間的區(qū)別一目了然了:

if?(!Object.create)?{
????Object.create?=?function?(o)?{
????function?F()?{}??//定義了一個隱式的構(gòu)造函數(shù)
????F.prototype?=?o;
????return?new?F();??//其實還是通過new來實現(xiàn)的
????};
??}

如果還有不清楚的,歡迎留言討論。

6 回復(fù) 有任何疑惑可以回復(fù)我~
#1

一直都在路上

我想問就是polyfill里的. 如果person2 = Object.create(person1),既然person2._proto_指向的是person1.為何person2._proto_ ===person1是false。但是person2._proto_.===person1.prototype就是true了。是不是 應(yīng)該指向的是person1的原型對象?
2016-11-26 回復(fù) 有任何疑惑可以回復(fù)我~
#2

一直都在路上

我知道了,我__proto__少寫了下劃線導(dǎo)致undefined===undefined
2016-11-26 回復(fù) 有任何疑惑可以回復(fù)我~

var?a?=?new?Object(b);????代表a的原型指向b;

var?a?=?new?Object();?????代表a的原型指向Object吧。?

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

zhangcl

var a = new Object();//a的原型指向Object的prototype屬性,和b沒關(guān)系 比如說: var a =new Object({x:1}),這里b = {x:1},那么a和b都是Object的實例,a和b的原型都是Object.prototype; a==b;//true a===b;//false 表示a和b是兩個不同的對象,他們的屬性一樣,a創(chuàng)建了一個b的副本,就相當(dāng)于兩個一模一樣的蘋果,僅僅是長得一樣而已,但是它們是不同的對象
2016-06-04 回復(fù) 有任何疑惑可以回復(fù)我~
#2

兿芝梅 回復(fù) zhangcl

為何我試了一下,a===b;為true呢?
2016-09-26 回復(fù) 有任何疑惑可以回復(fù)我~

a.prototype 返回的是undefine, 應(yīng)該是a.constructor.prototype?

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

慕蓋茨7302913

a.constructor 是指向構(gòu)造函數(shù)的, 所以 a.constructor === Object, a.constructor.prototype === Object.prototype
2017-07-14 回復(fù) 有任何疑惑可以回復(fù)我~

1L那位同學(xué)說錯了吧,var a=new Objiect(); //a具有原型Object.prototype

1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

FroG_0001

人是說它沒有父類,對的啊
2016-01-23 回復(fù) 有任何疑惑可以回復(fù)我~
#2

zhangcl

var a = new Object();//a的原型指向Object.prototype,a是沒有prototype的,在chrome中a的原型用__proto__來表示: a.__proto__ ===Object.prototype;//true
2016-06-04 回復(fù) 有任何疑惑可以回復(fù)我~
#3

zhangcl 回復(fù) zhangcl

不好意思,上面a.__proto__ == Object.prototype,a是Object的實例,應(yīng)該是兩個等號
2016-06-04 回復(fù) 有任何疑惑可以回復(fù)我~
#4

慕蓋茨7302913 回復(fù) zhangcl

a.__proto__ === Object.prototype 三個等號 絕對相等
2017-07-21 回復(fù) 有任何疑惑可以回復(fù)我~
查看1條回復(fù)
首頁上一頁12下一頁尾頁

舉報

0/150
提交
取消

請問老師new Object()和Object.create()兩者有何異同?

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號