国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript中的prototype和constructor簡明總結

2024-05-06 16:03:47
字體:
來源:轉載
供稿:網友
一直沒弄清楚JavaScript中的prototype和constructor屬性,今天看了看書,總算有點眉目了

一、constructor
constructor的值是一個函數。在JavaScript中,除了null和undefined外的類型的值、數組、函數以及對象,都有一個constructor屬性,constructor屬性的值是這個值、數組、函數或者對象的構造函數。如:

復制代碼 代碼如下:

var a = 12, // 數字
    b = 'str', // 字符串
    c = false, // 布爾值
    d = [1, 'd', function() { 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');

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

調用構造函數時,需要用new關鍵字,構造函數返回的是一個對象,看下面的代碼就知道了:

復制代碼 代碼如下:

var a = 4;
var b = new Number(4);

console.log('a: ', typeof a); // a: number
console.log('b: ', typeof b); // b: object

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

復制代碼 代碼如下:

function fn() {}

console.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;
}

B.prototype = A.prototype;

var test = new B('test');

test.show(); // test

這兒有一個問題,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 = B;

var test = new B('test');

test.show(); // test
console.log(test.constructor); // B(name)

之所以要這么做,是因為prototype的值是一個對象,且它的構造函數也就是它的constructor屬性的值就是它所在的函數,即:

復制代碼 代碼如下:

console.log(A.prototype.constructor === A); // true


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 白玉县| 思南县| 洪洞县| 林周县| 绥江县| 抚顺市| 清水河县| 乾安县| 赣州市| 当雄县| 北安市| 准格尔旗| 双鸭山市| 道真| 宝应县| 东莞市| 始兴县| 昭平县| 冷水江市| 朝阳市| 大埔区| 枝江市| 新巴尔虎右旗| 塘沽区| 滁州市| 桂林市| 平和县| 峨边| 栾城县| 凤山市| 长沙县| 天镇县| 绥中县| 准格尔旗| 托克托县| 达拉特旗| 会理县| 佛坪县| 婺源县| 全南县| 汉川市|