1. 程式人生 > >javascript建構函式

javascript建構函式

“物件”是一個實物的抽象,通常需要一個模板,表示某一類實物的共同特徵,然後“物件”根據這個模板生成。典型的面嚮物件語言(如C++和JAVA)有一個“類”的概念,這個“類”就是物件的模板。但是javascript不是基於類的,而是基於“建構函式Constructor”和“原型鏈Prototype"

建構函式的寫法跟普通函式的寫法一樣,但是它的函式名首字母要大寫。

建構函式的特點有兩個:1、函式體內部使用了this關鍵字,代表所要生成的物件例項;2、生成物件的時候必需用new

eg:

var Vehicle = function(){
	this.price = 2000;
}
var v = new Vehicle();

括號裡還可以帶引數。由於new命令本身就可以執行建構函式,所以後面的建構函式可以帶括號也可以不帶。

如果忘了使用new命令,那麼建構函式就變成了普通函式,這時的this就代表了全域性物件。為了保證建構函式必須與new命令一起使用,可以在建構函式內部使用嚴格模式(在嚴格模式中函式內部this不能指向全域性物件)

eg:

var Vehicle = function(){
	'use strict';
	this.price = 2000;
}
Vehicle();

結果:Uncaught TypeError: Cannot set property 'price' of undefined

    at Vehicle

解決方法二是在建構函式內部判斷是否使用new命令,如果沒有使用,則直接返回一個例項物件。

eg:

function Vehicle(){
if(!(this instanceof Vehicle)){
return new Vehicle();
}
this.price = 2000;
}
Vehicle().price;
(new Vehicle()).price;

————————————————————————————————————————————————————

函式內部可以使用new.target屬性。如果當前函式是new命令呼叫,new.target指向當前函式,否則為undefined

eg:

function f(){
	console.log(new.target === f);
}
f();//false
new f();//true