首頁  >  文章  >  web前端  >  JavaScript中的prototype和constructor簡明總結_基礎知識

JavaScript中的prototype和constructor簡明總結_基礎知識

WBOY
WBOY原創
2016-05-16 16:53:201189瀏覽

一、constructor
constructor的值是一個函數。在JavaScript中,除了null和undefined外的類型的值、陣列、函數以及對象,都有一個constructor屬性,constructor屬性的值是這個值、陣列、函數或物件的建構子。如:

複製程式碼 代碼如下:
var a = 12, // 數字
 'str', // 字串
    c = false, // 布林值
    d = [1, 'd', function() { return 5; }], // 陣列
    e = { return 5; }], // 陣列
    e = { name: 'e' }, // 物件
    f = function() { return 'function'; }; // 函數

console.log('a: ', a.constructor); / / Number()
console.log('b: ', b.constructor); // String()
console.log('c: ', c.constructor); // Boolean()
console.log('d: ', d.constructor); // Array()
console.log('e: ', e.constructor); // Object()
console.log(' f: ', f.constructor); // Function()


以上的建構子都是JavaScript內建的,我們也可以自訂建構函數,如:

程式碼如下:


function A(name) {
    this.name = name;
}

var a = new A('a');
;
var a = new A('a');
;;

;
;

;;;;; console.log(a.constructor); // A(name)

呼叫建構函式時,需要用new關鍵字,建構函式回傳的是一個對象,看下面的程式碼就知道了:



複製程式碼


程式碼如下:

二、 prototype
prototype是函數的一個屬性,預設情況下,一個函數的prototype屬性的值是一個與函數同名的空對象,匿名函數的prototype屬性名為Object。如:

複製程式碼

程式碼如下:function fn(ole) {}con> .log(fn.prototype); // fn { }

prototype屬性主要用來實現JavaScript中的繼承,如:




複製程式碼


程式碼如下:


程式碼如下:function A(name) {
    this.name = name;
}

A.prototype.show = function() {
    console.log(this.name);};

function B(name) {
    this.name = name;


這兒有一個問題,test的建構子其實是A函式而不是B函式:

複製程式碼 程式碼如下:
console.log(test.constructor); // A(name)


這是因為B.prototype = A.prototype把B.prototype的建構子改成了A,所以需要還原B.prototype的建構子:




複製程式碼


程式碼如下:

function A( name) {
    this.name = name;
}

A.prototype.show = function() {
    console.log(this.name);
;
}; 🎜>
function B(name) {    this.name = name;

}

B.prototype = A.prototype;B.prototype.constructor = Btype。 🎜>var test = new B('test');test.show(); // testconsole.log(test.constructor); // B(name)
之所以要這麼做,是因為prototype的值是一個對象,且它的構造函數也就是它的constructor屬性的值就是它所在的函數,即:
複製程式碼 程式碼如下:console.log(A.prototype.constructor === A); // true
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn