Constructor

Constructor

構造函數(Constructor)在對象創建或者實例化時候被調用的方法。通常使用該方法來初始化數據成員和所需資源。構造器Constructor在js不能被繼承,因此不能重寫Overriding,但可以被重載Overloading

構造函數在C++中如果寫成public屬性那麼可以繼承

簡介


構造函數,是一種特殊的方法,主要用來在創建對象時初始化對象,即為對象成員變數賦初始值。總與new運算符一起使用在創建對象的語句中,特別的一個類可以有多個構造函數,可根據其參數個數的不同或參數類型的不同來區分它們,即構造函數的重載。

解析


說明

JavaScript中的constructor
對象的constructor屬性用於返回創建該對象的函數,也就是我們常說的 構造函數。
在JavaScript中,每個具有原型的對象都會自動獲得constructor屬性。除了arguments、Enumerator、Error、Global、Math、RegExp、Regular Expression等一些特殊對象之外,其他所有的JavaScript內置對象都具備constructor屬性。例如:Array、Boolean、Date、Function、Number、Object、String等。所有主流瀏覽器均支持該屬性
瀏覽器支持
所有主要瀏覽器都支持constructor屬性。
c++
構造函數無返回值

語法

object.constructor (js)
classname() //c++

返回值

js對象的constructor屬性返回創建該對象的函數的引用。
c++對象無返回值

示例和說明

以下代碼中的[native code],表示這是JavaScript的底層內部代碼實現,無法顯示代碼細節。
// 字元串:String()
var str = "張三";
document.writeln(str.constructor); // function String() { [native code] }
document.writeln(str.constructor === String); // true
// 數組:Array()
var arr = [1, 2, 3];
document.writeln(arr.constructor); // function Array() { [native code] }
document.writeln(arr.constructor === Array); // true
// 數字:Number()
var num = 5;
document.writeln(num.constructor); // function Number() { [native code] }
document.writeln(num.constructor === Number); // true
// 自定義對象:Person()
function Person(){
this.name = "CodePlayer";
}
var p = new Person();
document.writeln(p.constructor); // function Person(){ this.name = "CodePlayer"; }
document.writeln(p.constructor === Person); // true
// JSON對象:Object()
var o = { "name" : "張三"};
document.writeln(o.constructor); // function Object() { [native code] }
document.writeln(o.constructor === Object); // true
// 自定義函數:Function()
function foo(){
alert("CodePlayer");
}
document.writeln(foo.constructor); // function Function() { [native code] }
document.writeln(foo.constructor === Function); // true
// 函數的原型:bar()
function bar(){
alert("CodePlayer");
}
document.writeln(bar.prototype.constructor); // function bar(){ alert("CodePlayer"); }
document.writeln(bar.prototype.constructor === bar); // true