摘要:冬天來了,好好學習,天天向上。在里面,得益于字面量對象,我們可以輕松的創建出一個對象,比如就可以直接創建對象。而在其它語言里面,無法通過這樣的方式創建一個對象,一般會借助構造方法和運算符。
冬天來了,好好學習,天天向上。
在js里面,得益于字面量對象,我們可以輕松的創建出一個對象,比如var o = {name: "tom"},就可以直接創建對象o。而在其它oo語言里面,無法通過這樣的方式創建一個對象,一般會借助構造方法和new運算符。
先看個例子,
function Person (name) { this.name = name } function Animal (type) { this.type = type return {type: "dog"} } const p1 = Person("tom") const p2 = new Person("tom") const a1 = Animal("cat") const a2 = new Animal("cat")
p1,p2,a1,a2分別等于什么?
p1是函數Person執行的結果,而函數Person沒有返回值,所以p1 = undefined;同理a1 = {type: "dog"}
p2是Person的實例, p2 = {name: "tom"};a2是Animal的實例,a2 = {type: "dog"}
那么問題來了,為什么不是期望中的a2 = {type: "cat"}
因為new主要干了下面幾件事:
創建一個新對象o,并將新對象o的原型對象指向構造函數的原型屬性
將構造函數的this指向新對象o
執行構造函數中的代碼,如果返回值是個對象(引用類型)則返回該對象,否則返回新對象o(注意:如果返回null也返回新對象o)
針對上面的Person類,可以依據上面的規則寫出new函數
const mynew = (Func, name) => { let o = {} o.__proto__ = Func.prototype let res = Func.call(o, name) if(res instanceof Object) { return res } else { return o } }
執行mynew函數驗證
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100236.html
摘要:屬性和方法被加入到引用的對象中。并執行了該函數新創建的對象由所引用,并且最后隱式的返回。 1、創建一個空對象,并且 this 變量引用該對象,// lat target = {}; 2、繼承了函數的原型。// target.proto = func.prototype; 3、屬性和方法被加入到 this 引用的對象中。并執行了該函數func// func.call(target); 4...
摘要:屬性和方法被加入到引用的對象中。并執行了該函數新創建的對象由所引用,并且最后隱式的返回。 1、創建一個空對象,并且 this 變量引用該對象,// lat target = {}; 2、繼承了函數的原型。// target.proto = func.prototype; 3、屬性和方法被加入到 this 引用的對象中。并執行了該函數func// func.call(target); 4...
摘要:引言上篇文章介紹原型,這篇文章接著講繼承,嘔心瀝血之作,大哥們點個贊呀明確一點并不是真正的面向對象語言,沒有真正的類,所以我們也沒有類繼承實現繼承有且僅有兩種方式,和原型鏈在介紹繼承前我們先介紹下其他概念函數的三種角色一個函數,有三種角色。 showImg(https://segmentfault.com/img/bVbo4hv?w=1800&h=1000); 引言 上篇文章介紹原型,...
摘要:在結合下面簡要的分析,分鐘內你就能搞明白的啟動流程。關于的啟動,我在驚天秘密從開始,揭露線程通訊的詭計和主線程的陰謀一文中有提到過。從上圖可以看到,方法中主要做的事情有初始化主線程的主。并使主線程進入等待接收消息的無限循環狀態。 showImg(https://segmentfault.com/img/remote/1460000009912818); 背景介紹 從事開發到了一定階段,...
閱讀 2746·2021-11-16 11:45
閱讀 1654·2021-09-26 10:19
閱讀 2051·2021-09-13 10:28
閱讀 2803·2021-09-08 10:46
閱讀 1530·2021-09-07 10:13
閱讀 1525·2019-08-30 13:50
閱讀 1374·2019-08-30 11:17
閱讀 1455·2019-08-29 13:18