其实下边第一个例子早就写好了 , 一直没试和prototype相关的 就没贴出来
最近微忙, 以后可能前端的东西会写的更多一点, 而且 jQuery可能不让用... 还是好好弄弄原生Js吧
还是先凑合记下来, 回头再来改
0.命名空间
var nameSpace = {};//==>定义一个命名空间
1.描述创建对象
//==>1.初始化一个对象
nameSpace.TestObj = function(){
var val = 0;
var fun1 = function(){//==>相当于private(var作用域限制)
alert( val );
};
this.fun2 = fun1;//==>相当于public
};
var obj = new nameSpace.TestObj();//==>new出来
obj.fun2();//==>不能调用fun1(),因为var作用域仅在function内
/*
//==>换种方法,直接描述出一个对象
nameSpace.TestObj = {
val : 0,
fun1 : function(){
alert( this.val );
},
fun2 : function(){
this.fun1()
}
};
nameSpace.TestObj.fun2();
*/
2.prototype原型
//==>2.Prototype对象
nameSpace.TestPrototypeObj = function(){};
nameSpace.TestPrototypeObj.prototype = {
name : "kk",//==>这样定义会在每个TestPrototypeObj中都初始化"kk"和24两条信息,
age : 24,//==>所以属性存在构造里, 函数存在原型里:数据分离,节省内存
}
nameSpace.TestPrototypeObj.prototype.sayHi = function(){
alert("Hi~"+this.name);
};
var first = new nameSpace.TestPrototypeObj();
var second = new nameSpace.TestPrototypeObj();//==>都会带着"kk"和24两条信息
first.sayHi();
3.混合定义对象
//==>混合俩种方式的定义
nameSpace.TestMixObj = function(name, age)
{
this.name = name;
this.age = age;
}
nameSpace.TestMixObj.prototype.job = "doctor"; //==>动态添加一个属性
nameSpace.TestMixObj.prototype.getJob = function(){//==>动态添加一个方法
alert( "Job of "+this.name+"("+this.age+")"+" is "+this.job );
}
var kk = new nameSpace.TestMixObj("kk", 24);//==>按需构造
kk.getJob();