javascript设计模式(张容铭著)第一章笔记

// 此内容是张容铭写的javascript设计模式的第一章,简单介绍了面向对象编程

// 感觉就像是自己的js在摸索过程中的进化史,从面向过程到面向对象,一步步在改良

// 看完这几个简单的示例,意味深长,都是骚操作

// 为了方便,将匿名function 赋值给fn,没有实际含义

var fn = function(){}

// 刚开始做开发为了满足功能而写的方法

function checkNmae(){

// code

}

function checkEmail() {

// code

}

function checkPassword() {

// code

}

// 改良版,将方法用变量表示

var checkNmae = fn;

var checkEmail = fn;

var checkPassword = fn;

// 使用对象收编变量

var checkObj = {

checkEmail:fn,

checkNmae:fn,

checkPassword:fn

}

// 对象的另一种形式

var checkObj = fn;

checkObj.checkNmae = fn;

checkObj.checkEmail = fn;

checkObj.checkPassword = fn;

//以上两种形式,只能单一的解决了问题,但是不能够重复使用

var checkObj = function(){

return{

checkNmae:fn,

checkEmail:fn,

checkPassword:fn

}

}

// 使用的方式

var a = checkObj();

a.checkPassword();

// 此处可以创建一个累,这样的话就可以根据这个类,new无限个对象

var checkObj = function(){

this.checkEmail=fn;

this.checkNmae = fn;

this.checkPassword = fn;

}

var a = new checkObj();

a.checkEmail();

// 以上在使用过程中比较耗费资源,可以使用prototype来实先

var checkObj = fn;

checkObj.prototype.checkEmail = fn;

checkObj.prototype.checkNmae = fn;

checkObj.prototype.checkPassword = fn;

var a = new checkObj();

a.checkEmail();

// 另一种prototype方式,不能与上面的混合使用,会出现覆盖问题

var checkObj = fn;

checkObj.prototype = {

checkEmail:fn,

checkNmae:fn,

checkPassword:fn

}

var a = new checkObj();

a.checkEmail();

// 实现以上以后,想实现程序的连续调用

var checkObj = {

checkNmae:function(){

return this;

},

checkEmail:function(){

return this;

},

checkPassword:function(){

return this;

}

}

checkObj.checkEmail().checkNmae().checkPassword();

// 在原型中可以使用这个方式,return this 即可

// 也可以直接操作Function函数,但是如果这么做了会直接污染Function函数,不建议这样

Function.prototype.checkEmail = fn;

var f = fn;

f.checkEmail();

// 可以在原型上抽象出一个统一的添加方法

Function.prototype.addMethod = function(name,func){

this[name] = func;

}

var a = function(){}

a.addMethod('checkName',fn);

a.addMethod('checkPassword',fn);

// 如果想实现链式调用

Function.prototype.addMethod = function(name,func){

this[name] = func;

return this;

}

var a = function(){}

a.addMethod('checkName',function(){

return this;

});

a.addMethod('checkPassword',function(){

return this;

});


 

// 对于习惯使用类的同学来说,还可以这样操作

Function.prototype.addMethod = function(name,func){

this.prototype[name] = func;

return this;

}

var a = function(){}

a.addMethod('checkName',fn);

a.addMethod('checkPassword',fn);

var b = new a();

b.checkEmail().checkPassword();

// 此内容是张容铭写的javascript设计模式的第一章,简单介绍了面向对象编程
// 感觉就像是自己的js在摸索过程中的进化史,从面向过程到面向对象,一步步在改良

// 看完这几个简单的示例,意味深长,都是骚操作

// 为了方便,将匿名function 赋值给fn,没有实际含义
var fn = function(){}

// 刚开始做开发为了满足功能而写的方法
function checkNmae(){
    // code
}

function checkEmail() {
    // code
}

function checkPassword() {
    // code
}

// 改良版,将方法用变量表示
var checkNmae = fn;
var checkEmail = fn;
var checkPassword = fn;

// 使用对象收编变量
var checkObj = {
    checkEmail:fn,
    checkNmae:fn,
    checkPassword:fn
}

// 对象的另一种形式
var checkObj = fn;

checkObj.checkNmae = fn;
checkObj.checkEmail = fn;
checkObj.checkPassword = fn;

//以上两种形式,只能单一的解决了问题,但是不能够重复使用

var checkObj = function(){
    return{
        checkNmae:fn,
        checkEmail:fn,
        checkPassword:fn
    }
}

// 使用的方式 
var a = checkObj();
a.checkPassword();

// 此处可以创建一个累,这样的话就可以根据这个类,new无限个对象
var checkObj = function(){
    this.checkEmail=fn;
    this.checkNmae = fn;
    this.checkPassword = fn;
}

var a = new checkObj();
a.checkEmail();

// 以上在使用过程中比较耗费资源,可以使用prototype来实先
var checkObj = fn;
checkObj.prototype.checkEmail = fn;
checkObj.prototype.checkNmae = fn;
checkObj.prototype.checkPassword = fn;

var a = new checkObj();
a.checkEmail();

// 另一种prototype方式,不能与上面的混合使用,会出现覆盖问题

var checkObj = fn;
checkObj.prototype = {
    checkEmail:fn,
    checkNmae:fn,
    checkPassword:fn
}

var a = new checkObj();
a.checkEmail();

// 实现以上以后,想实现程序的连续调用
var checkObj = {
    checkNmae:function(){
        return this;
    },
    checkEmail:function(){
        return this;
    },
    checkPassword:function(){
        return this;
    }
}

checkObj.checkEmail().checkNmae().checkPassword();

// 在原型中可以使用这个方式,return this 即可

// 也可以直接操作Function函数,但是如果这么做了会直接污染Function函数,不建议这样
Function.prototype.checkEmail = fn;
var f = fn;
f.checkEmail();

// 可以在原型上抽象出一个统一的添加方法
Function.prototype.addMethod = function(name,func){
    this[name] = func;
}

var a = function(){}
a.addMethod('checkName',fn);
a.addMethod('checkPassword',fn);

// 如果想实现链式调用
Function.prototype.addMethod = function(name,func){
    this[name] = func;
    return this;
}

var a = function(){}
a.addMethod('checkName',function(){
    return this;
});
a.addMethod('checkPassword',function(){
    return this;
});


// 对于习惯使用类的同学来说,还可以这样操作
Function.prototype.addMethod = function(name,func){
    this.prototype[name] = func;
    return this;
}
var a = function(){}
a.addMethod('checkName',fn);
a.addMethod('checkPassword',fn);

var b = new a();
b.checkEmail().checkPassword();

猜你喜欢

转载自blog.csdn.net/xlelou/article/details/81086156