關於原型的一些補充

2022-08-27 13:21:06 字數 1677 閱讀 1927

以前要訪問原型,必須使用建構函式來實現,無法直接使用例項物件來訪問原型 火狐最早引入屬性__proto__,表示使用例項物件引用原型. 但是早期是非標準的。 通過該屬性可以允許使用例項物件直接訪問原型

function person() {}

// 神秘物件就是 person.prototype

// 那麼只有使用 建構函式 才可以訪問它

var o = new person();

// 以前不能直接使用 o 來訪問神秘物件

// 現在有了 __proto__ 後

// o.__proto__ 也可以直接訪問神秘物件

// 那麼 o.__proto__ === person.prototype

神秘物件中預設都有乙個屬性「constructor」,翻譯為構造器,表示該原型是與神秘建構函式聯絡起來的

__proto__有什麼用?

如果在早期的瀏覽器中使用例項需要訪問原型如何處理?

如果給例項繼承自原型的屬性賦值

function foo() {}

foo.prototype.name = 'test';

var o1 = new foo();

var o2 = new foo();

o1.name = '張三'; // 不是修改原型中的 name 而是自己增加了乙個 name 屬性

console.log( o1.name + ', ' + [o2.name );

最簡單的繼承就是 將別的物件的屬性強加到 我的 身上, 那麼我就有這個成員了.

利用原型也可以實現繼承, 不需要在我的身上新增任何成員, 只要原型有了, 我就有了.

結論: 將屬性, 方法等成員利用 混入的辦法, 加到建構函式的原型上, 那麼建構函式的例項就都具有該方法了.

new divtag() 用來 建立 div 物件

擴充套件無論方法怎麼寫, 方法是誰呼叫的, this 就是誰

使用點語法給原型新增成員與使用直接替換修改原型物件有什麼區別?

原型指向發生了變化

建構函式所建立的物件所繼承的原型不同

新增的物件的預設是沒有constructor屬性

注意:在使用替換的方式修改原型的時候,一般都會新增constructor屬性

function person() {}

person.prototype = ;

// 拆解

function person() {}

var o = {};

o.costructor = person; // 屬性中就儲存著函式的位址

person.prototype = o;

person = 123;

這裡提一下靜態成員與例項成員的概念,也是從面相物件的程式語言中引入的,很多前端人員並不知道或者理解,我也就簡單的提一下

靜態成員表示的是靜態方法和靜態屬性的概念,所謂的靜態,就是由建構函式所提供的。

例項成員表示的是例項方法和例項屬性,所謂的例項就是由建構函式所建立的物件所提供的。

一般工具型方法都由靜態成員提供,一般與例項物件有關的方法由例項成員表示。

屬性搜尋原則

原型鏈 什麼是原型鏈,今天時間不夠整理的了,就補充到這裡,明天如果有時間,給大家整理下原型鏈方面的東西

關於js原型鏈繼承的一些複習

1 function person name,age 7 89 person.prototype.race function 12 13 let a new person wangwu 99 14console.log a.age 15a.run 16 a.race 1.靜態繼承 person.si...

關於「驗證碼的製作」的一些補充

上次寫了點關於驗證碼製作的 算是學習了drawing中的一些東西,心裡很快活,也樂意為大夥兒做些善事,於是便萌發了把驗證碼封裝成簡單的控制項發布出去的念頭 起初是用ashx 一般處理程式,俗稱httphander 的做法,ok。在webform和mvc兩種情況下毫無問題 很簡單,假設把ashx放在程...

linux一些指令的補充

chgrp 改變群組 chgrp命令變更檔案或目錄所屬群組,比如 檢視現在aa檔案所屬組為clip root clip clip ls l aa total 32040 rwxrwxr x 1 clip clip 1260 apr 26 14 05 aa 想更改為delijia 這個地方改變的群組必...