js学习
#函数
第一版
function checkName(){}
function checkEmail(){}
或者
var checkName = function(){}
var checkEmail = function(){}
问题:这么编写函数创建了很多全局变量,(js中一切皆对象),会影响到别的别的功能,函数覆盖。
第二版
针对创建多个全局变量,简单结局方案是将这些变量保存到一个变量里面 减少覆盖风险
例如:
var CheckObject = {
checkName : function(){},
checkEmail:function(){},
chencPassword:function(){}
}
或者(先声明对象 在给对象添加方法)
var CheckObject = function(){};
CheckObject .checkName = function(){};
CheckObject .checkEmail= function(){};
CheckObject .chencPassword= function(){};
这样全局对象变为一个。调用方式也简单 CheckObject.checkName();
第三版
前面那种方案,新创建的对象不能继承这些检查方法。没有this概念
var CheckObject = function(){
return {
checkName : function(){},
checkEmail:function(){},
chencPassword:function(){}
}
}
第四版
采用类的方式
var CheckObject = function(){
this.checkName = function(){}
this.checkEmail = function(){}
this.checkPassword = function(){}
}
然后使用new 关键字创建对象
var a = new CheckObject ();
a.checkName();
采用类创建对象,每个对象实例都有一套自己的方法。(其实这些方式只需要一份就行了)
第五版
通过this定义,每次new创建对象的时候,新创建的对象都会对类的this属性进行赋值。然而有些属性和方法没有必要为每个对象创建一遍。
var CheckObject = function(){};
CheckObject .prototype.checkName = function(){};
CheckObject .prototype.checkEmail= function(){};
CheckObject .prototype.chencPassword= function(){};
链式调用
var CheckObject = {
checkName : function(){ return this},
checkEmail:function(){return this},
chencPassword:function(){return this}
}
调用方式有之前的
var a = new CheckObject();
a.checkName();
a.checkEmail();
a.checkPassword();
变换为
CheckObject .checkName().checkEmail().checkPassword();
原型对象也可以操作
var CheckObject = function(){};
CheckObject .prototype = {
checkName : function(){
return this;
},
checkEmail:function(){
return this;
},
checkPassword:function(){
return this;
}
}
使用方式变化为:
var a = new CheckObject();
a.checkName().checkEmail().checkPassword();