2015-11-05 74 views
1

如你所知,在JavaScript函數是對象,我的問題是用下面的代碼:的JavaScript:默認對象的屬性和方法

function Car() { 
this.color = "black"; 
} 
console.log(Car.name); 
console.log(Car.color); 

輸出:汽車未定義

因爲我可以訪問名稱汽車對象的屬性爲什麼不能以同樣的方法訪問汽車對象的屬性顏色

又如:

console.log("Hello".charAt.name); 
console.log("Hello".charAt.length); 

輸出:的charAt 1

這裏的charAt是String對象的一個​​方法,但我用它的名稱作爲參考訪問名稱長度屬性,而不僅是這些屬性,但也有一些方法,如:hasOwnPropertyisPrototypeOf

我的問題是這些屬性和方法究竟是什麼?

+3

因爲'color'設置在_construction_時間對象'Car'類型,並且不是該類型的屬性。 ('carObj = new Car(); console.log(carObj.color);') –

+0

如果你甚至不執行函數,你如何期望訪問函數內的東西? 'this.color ='black';'這行永遠不會執行。如果你做了一個'console.dir(Car)',你可以看到函數具有哪些屬性。 –

+2

閱讀文檔! https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function#Function_prototype_object https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects /對象#方法 – Bergi

回答

2

在類而言,name是類的一個屬性,而Carcolor是類Car的一個實例的特性。創建新實例時,只能訪問color屬性。

function Car() { 
 
    this.color = "black"; 
 
} 
 
var car = new Car() 
 
document.write(Car.name +'<br>'); 
 
document.write(car.color +'<br>');

0
在你的第一個例子

你想訪問的function Car財產color;

function Car() { 
 
this.color = "black"; 
 
console.log(this)//Window {} 
 
}; 
 

 
/*you need to set Car.color */ 
 
Car.color = 'white'; 
 
console.log(Car.name);//Car 
 
console.log(Car.color);//white 
 

 
Car(); 
 

 
console.log(color)//black 
 

 

 
//Car 
 
//white 
 
//Window {} 
 
//black

而name屬性在函數聲明中自動設置..

正常調用時,在非嚴格的情況下,this裏面的功能指的是Window對象(這是全球性的在瀏覽器上);


在另一方面,如果你調用該函數作爲構造 this

是指返回對象:

function Car() { 
 
this.color = "black"; 
 
console.log(this) //object instance assigned to mazda 
 
}; 
 
var mazda = new Car(); 
 
console.log(mazda.color)