本文鏈接:https://blog.csdn.net/u012790503/article/details/46278521
function A(){this.id = "我是AA"} // 在構造函數外定義的都是所有對象共享的 A.id = "我是A"; A.sayId = function(){alert(A.id);} A.sayId();
如上,在構造函數外用函數名定義的屬性或者方法,可以也只可以通過函數名來訪問,這和C++基本一樣。
輸出
試圖訪問非靜態變量時
function A(){this.id = "我是AA"} // 在構造函數外定義的都是所有對象共享的 A.id = "我是A"; A.sayName = function(){alert(this.id);} A.sayName();
輸出
說明訪問不了。
再看看this是什么
那么如果用prototype呢?
function A(){this.id = "我是AA"} // 在構造函數外定義的都是所有對象共享的 A.prototype.id = "我是A"; A.prototype.sayName = function(){alert(this.id);} a = new A(); a.sayName();
輸出
說明:
1、輸出"我是AA"是因為"我是A"是在之后賦值的,把"我是A"覆蓋了。
2、prototype指向的是一個Object對象,注意它是一個對象,當使用prototype時(或者是定義函數后),會產生一個Object對象,等同於 object = new Object();
3、通過prototype添加的屬性和方法不是靜態的,只能通過對象來訪問。