萬千封印
2018-12-07 05:30:51
1 function logs(str){document.write(str+"<br />")}
2
3 //動態(tài)原型方法的精髓在于使用 prototype 聲明實例方法,使用 this 聲明實例屬性
4 function Car(){
5 this.color = "none"; //實例實屬
6 if( typeof Car._initialized == "undefined"){
7 Car.prototype.showCar = function(){ //實例方法
8 logs(this.color);
9 }
10 }
11 Car._initialized = true; //靜態(tài)屬性 ? 實例屬性?
12 }
13 logs(Car.color); //undefined
14 logs(Car._initialized); //undefined ?
15 var ca = new Car();
16 logs(ca.color); //none
17 logs(Car._initialized); //true ?
18 logs(ca._initialized); //undefined ?
19 ca.showCar(); //none
14 17 18 行 ?
在函數Car中 這樣Car._initialized 聲明的屬性 這個屬性到底是靜態(tài)屬性,還是實例屬性,
如果是靜態(tài)屬性為什么 14行報錯?
如果是實例屬性 18行為什么? ?而在聲明對象ca后 17行又是對的?
6 回答

撒科打諢
TA貢獻1934條經驗 獲得超2個贊
問: 在函數Car中 這樣Car._initialized 聲明的屬性 這個屬性到底是靜態(tài)屬性,還是實例屬性?
答: 靜態(tài)屬性,更準確的說應該叫 類屬性。
問:如果是靜態(tài)屬性為什么 14行報錯?
答: Javascript是純動態(tài)的語言和Java之類的不一樣,java是預先編譯好類的結構的,如果是java 使用靜態(tài)變量不用new 類直接用類名就可以訪問變量,而javascript卻必須new function,否則是執(zhí)行不到代碼,變量也就不會存在。就是說javascript里function中的變量不執(zhí)行是不存在的。所以必須先new Car 靜態(tài)變量 Car._initialized 才會存在。new過之后你才能訪問到這個變量。
問:如果是實例屬性 18行為什么? ?而在聲明對象ca后 17行又是對的?
答:不是實例屬性;上面已經做出回答。
記得加分啊哈哈。

千巷貓影
TA貢獻1829條經驗 獲得超7個贊
Car._initialized = true;最好不要看這一句。整個例子是一個動態(tài)原型方式。
加上這么一句的作用,只在于當第一次構造函數時,會生成相應的方法,再次生成是,因為是ture了,所以就避免了重復。它的作用,有點像標識而已。
添加回答
舉報
0/150
提交
取消