在了解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.當函式以建構函式的形式呼叫時...