function StructFunc(msg){
//特權(quán)屬性(共有屬性)
this.msg = msg; //只有實例化后才能調(diào)用
this.address = "陽泉";
//私有屬性
var names = "itdong";
var age = "itdong";
var that = this;
//私有方法
function sayName(){
alert(that.names);
}
//特權(quán)方法 (共有方法)
this.sayAge = function(){
alert(age); //在共有方法可以訪問私有成員
}
}
//共有方法 適用于通過new關(guān)鍵詞實例化的該對象的每個實例
//向prototype中添加成員將會將新方法添加到構(gòu)造函數(shù)的底層
StructFunc.prototype.sayHello = function(){
alert("hello world !");
}
//靜態(tài)屬性就是最為Function對象實例函數(shù)的構(gòu)造函數(shù)本身
StructFunc.names = "zhao";
//靜態(tài)方法
StructFunc.alertName = function(){
alert(this.names)
}
//實例化
var zhao = new StructFunc('hello');
/*** 測試屬性 ***/
console.log(StructFunc.names) //通過39行代碼給構(gòu)造函數(shù)本身賦值了“zhao”
console.log(zhao.names) //undefined 靜態(tài)屬性不適用一般屬性
console.log(zhao.constructor.names) //想訪問類的靜態(tài)屬性,先訪問該實例的構(gòu)造函數(shù),然后在訪問該類的靜態(tài)屬性
console.log(StructFunc.address) //undefined StructFunc中的this指針指的不是函數(shù)本身沧奴,而是調(diào)用address的對象翎碑,而且只能的對象
console.log(zhao.address) //this指針指的是實例化后的m1
/*** 測試方法 ***/
StructFunc.alertName() //直接調(diào)用函數(shù)的靜態(tài)方法
// zhao.alertName() //undefined is not a function 和類沒關(guān)系
zhao.constructor.alertName() //調(diào)用對象構(gòu)造函數(shù)的方法
zhao.sayHello() //StructFunc 下的prototype原型下的方法將會唄類階乘
// StructFunc.sayHello(); //原型方法不是類方法
/*** 測試prototype ***/
console.log(zhao.prototype) //undefined 實力沒有prototype
console.log(StructFunc.prototype)
alert(StructFunc.prototype.constructor)
console.log(StructFunc.prototype.constructor.names)