JS原型(一) 原型物件

2021-09-23 06:19:23 字數 1401 閱讀 4667

在了解js原型物件之前,我們需要了解一些基礎知識:

首先是建構函式,我們要知道建構函式的幾個特點

建構函式的首字母必須大寫 ,區分於其他普通函式

內部使用的this物件,指向即將要生成的例項物件。

使用new來生成例項物件

由此我們可以得到,任何函式只要通過new操作符來呼叫,那這個函式就可以稱為建構函式。

// 文章中之後的知識點都是以這個函式作為基礎

function person(name, age)

var person1 = new person('echo', 19);

var person2 = new person('jose', 18);

如上**所示,由於在例項化person1和person2的時候,我們通過new操作符來呼叫person,所以person這個函式就是建構函式

所以person1和person2都是person的例項,在例項化person1和person2的時候,會自動獲得乙個constructor屬性,這個屬性是乙個指標,指向person。

person1.constructor === person;  // true

person2.constructor === person; // true

由上面的實驗,所以我們可以得到乙個定律:

在js中,每個函式物件在建立的時候,都會自動分配乙個 prototype屬性,這個屬性指向函式的原型物件,

需要注意的是:

(function.prototype是函式物件,但是它沒有prototype屬性)

那什麼是原型物件呢,其實原型物件也是乙個普通物件,在上面的函式中,person.prototype就是原型物件,

原型物件缺省會獲得乙個constructor(建構函式)屬性,而這個屬性是乙個指標,指向prototype屬性所在的函式,所以我們可以得到:

person.prototype.constructor === person
而我們知道:

person1.constructor === person;
為什麼person1也有constructor屬性呢,因為person1是person的例項;

那為什麼person.prototype也有constructor屬性呢,我們可以把person.prototype想象是person的例項;

也就是說,person在建立的時候,建立了乙個它的例項物件並賦值給它的prototype:

let a = new person();

person.prototype = a;

此時,我們可以得出結論:

JS 物件 JS原型 原型鏈

參考學習 js物件 構造器函式 建立物件的函式。物件分為普通物件和函式物件。所有物件都有 proto 屬性 函式物件不止有 proto 屬性,還有prototype屬性 稱為原型物件 1.new function 產生的物件都是函式物件。2.所有函式物件的 proto 都指向function.pro...

JS原型物件,原型鏈

js中建立物件都是通過建構函式建立的,所以每個物件中都有乙個指向其建構函式的指標constructor var obj new object var arr new array var obj2 字面量建立實質上是上面方式的簡寫 var arr2 var str new string test 建立...

JS原型物件

原型prototype 將函式定義在全域性作用域中的缺點 1.會汙染全域性作用域的命名空間,如 函式functiona 那麼在全域性作用域中就不能再出現functiona這個命名了。2.定義在全域性作用域中不安全。因此,就用到了主角 原型 1.所有的函式都有原型物件 2.當函式以建構函式的形式呼叫時...