function StructFunc(msg){
//特权属性(共有属性)
this.msg = msg; //只有实例化后才能调用
this.address = "阳泉";
//私有属性
var names = "itdong";
var age = "itdong";
var that = this;
//私有方法
function sayName(){
alert(that.names);
}
//特权方法 (共有方法)
this.sayAge = function(){
alert(age); //在共有方法可以访问私有成员
}
}
//共有方法 适用于通过new关键词实例化的该对象的每个实例
//向prototype中添加成员将会将新方法添加到构造函数的底层
StructFunc.prototype.sayHello = function(){
alert("hello world !");
}
//静态属性就是最为Function对象实例函数的构造函数本身
StructFunc.names = "zhao";
//静态方法
StructFunc.alertName = function(){
alert(this.names)
}
//实例化
var zhao = new StructFunc('hello');
/*** 测试属性 ***/
console.log(StructFunc.names) //通过39行代码给构造函数本身赋值了“zhao”
console.log(zhao.names) //undefined 静态属性不适用一般属性
console.log(zhao.constructor.names) //想访问类的静态属性,先访问该实例的构造函数,然后在访问该类的静态属性
console.log(StructFunc.address) //undefined StructFunc中的this指针指的不是函数本身,而是调用address的对象,而且只能的对象
console.log(zhao.address) //this指针指的是实例化后的m1
/*** 测试方法 ***/
StructFunc.alertName() //直接调用函数的静态方法
// zhao.alertName() //undefined is not a function 和类没关系
zhao.constructor.alertName() //调用对象构造函数的方法
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)