亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問js原型是存在于構造函數中嗎?

請問js原型是存在于構造函數中嗎?

收到一只叮咚 2019-03-14 18:15:43
小白有點分不太清楚。構造函數中,有個__proto__屬性,里面指向的是原型。那么是不是就說明原型是存在于構造函數中的,屬于構造函數的一個屬性?還是說,prototype原型不是屬于構造函數的,而__proto__只是指路人而已?
查看完整描述

2 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

構造函數中,有個__proto__屬性,里面指向的是原型。

首先,構造函數的自有屬性里,沒有 __proto__ 屬性,你看到的可能是構造函數的原型鏈加粗文字上的,或者是實例__proto__ 屬性;

其次,構造函數中訪問它對應的原型對象,用 prototype 屬性,原型對象上有 constructor 屬性指向構造函數,構造函數和原型對象互相關聯;

那么是不是就說明原型是存在于構造函數中的,屬于構造函數的一個屬性?

prototype 是存在于構造函數中的,屬于構造函數的一個屬性。原型是一個對象,構造函數的prototype指向這個對象。

還是說,prototype原型不是屬于構造函數的,而__proto__只是指路人而已?

指路人說法不準確,prototype 僅僅是構造函數的屬性,是一個引用,指向內存里的 prototype 對象;__proto__ 在實例上,作為實例的屬性,是一個引用,指向內存里的 prototype 對象

題外話

1、__proto__ 不建議使用,可以用 Object.getPrototypeOf() 和 Object.setPrototypeOf() 代替;

2、原型建議看經典書籍吧,書上說的嚴謹清楚些;

3、你的基本概念有些混亂,還是看經典書籍吧

JavaScript權威指南-第6版-中
JavaScript高級程序設計-第3版-中


查看完整回答
反對 回復 2019-03-18
?
森林海

TA貢獻2011條經驗 獲得超2個贊

當你定義一個(構造)函數的時候,伴隨這這個函數的定義,這個函數自然具有一個prototype屬性,這個屬性指向一個對象,我們把它稱作函數的原型對象吧,這個原型對象中有一個屬性constructor指向了這個函數。


可以認為定義構造函數<F>的同時也生成了一個對象<O>,構造函數<F>用prototype屬性指向<O>,<O>用constructor屬性指向<F>,它們就綁在了一起。


function F(){};

console.log(F === F.prototype.constructor); // true

上面說的和__proto__還沒有關系,它是在用構造函數生成的實例上的。當我們用構造函數生成一個實例時<R>,這個實例有一個屬性__proto__指向了那個原型對象<O>。


var R = new F();

console.log(R.__proto__ === F.prototype);   // true

現在我們來看構造函數<F>、原型對象<O>、實例對象<R>: <F>用prototype屬性指向<O>, <R>用__proto__屬性指向<O>, 而<O>用constructor屬性指向<F>。如果你畫個圖就更清晰了。

https://img1.sycdn.imooc.com//5c8f218c00012d6507300305.jpg

另外說以下,要通過實例對象來獲得它的原型對象,__proto__并太好,由于瀏覽器大多支持,因此es6中也寫入了標準,但是從它的寫法就看出它更多地是一個內部的屬性,實際代碼中可以用Object.getPrototypeOf()方法,傳入一個實例對象,就可以獲得它的原型對象。

查看完整回答
反對 回復 2019-03-18
  • 2 回答
  • 0 關注
  • 830 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號