1. 程式人生 > 程式設計 >JS原型物件操作例項分析

JS原型物件操作例項分析

本文例項講述了JS原型物件操作。分享給大家供大家參考,具體如下:

萬物皆物件,函式也同樣是物件,是特殊的函式物件

function fn() {}
let a = new fn();
let b = new Function()

console.log(typeof a);  // object 
console.log(typeof b);  // function

開啟瀏覽器,輸入fn,會發現fn有一個prototype(原型)屬性,這個屬性是一個指標,指向原型物件,這個物件包括了特定型別所有共享的屬性和方法。
換句話說,prototype物件包含了函式所有的共享屬性和方法。

function fn() {}
fn.prototype.a = 18;
fn.prototype.b = "b";
fn.prototype.test = function() {
 console.log(123);  
}
var r = new fn();
console.log(r.a);  // 18

我們直接在函式fn的原型屬性上加了兩個屬性和一個方法,例項化後便可以訪問原型中的值。

  • 原型物件有一個constructor屬性,它也是一個指標,它指向原來的函式,也就是說,fn.prototype.constructor == fn。
  • 所有的例項都有這個原型物件,因此例項可以訪問到原型物件中的屬性和方法。

JS原型物件操作例項分析

那麼例項怎麼搜尋變數或者方法的值呢?首先,函式例項會在函式本身上去尋找該變數,如果沒有找到,會在原型物件上尋找變數。

function fn() {}
fn.prototype.a = 18;
fn.prototype.b = "b";
fn.prototype.test = function() {
 console.log(123);
}
var a = new fn();
var b = new fn();
b.a = 20
console.log(b.a);  // 20
console.log(a.a);  // 18

建立了兩個例項,在b例項上手動添加了一個a屬性,在fn的原型物件上也有一個a屬性,那麼對於b例項會優先訪問本身的屬性而不是原型上的屬性。

參考內容:JavaScript高階程式設計

感興趣的朋友可以使用線上HTML/CSS/JavaScript程式碼執行工具:http://tools.jb51.net/code/HtmlJsRun測試上述程式碼執行效果。

更多關於JavaScript相關內容感興趣的讀者可檢視本站專題:《javascript面向物件入門教程》、《JavaScript錯誤與除錯技巧總結》、《JavaScript資料結構與演算法技巧總結》、《JavaScript遍歷演算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程式設計有所幫助。