资讯专栏INFORMATION COLUMN

《JavaScript设计模式》阅读笔记_part1

plus2047 / 457人阅读

摘要:设计模式阅读更多文章查看本专栏第二章类闭包实现类闭包可以理解为类生成器闭包代码最多只出版本书构造器使用使用方法与普通的是一致的。可以使用安全模式避免忘记使用的情况。

JavaScript设计模式阅读
更多文章查看本专栏
第二章:类 1、闭包实现类
闭包可以理解为"类生成器"

闭包代码:

var Book = (function(){
    var bookNum = 0;
    function checkBook(name){
    }
    return function(newId,newName,newPrice){
        var name,price;
        this.id = newId;
        bookNum++;
        if(bookNum > 100){
            throw new Error("最多只出版100本书");
        }
        function checkID(id){}
        this.getName = function(){
            console.log(name);
            return name;
        };
        this.getPrice = function(){
            console.log(price);
            return price;
        };
        this.setName = function (mName) {
            name = mName;
        };
        this.setPrice = function (mPrice) {
            price = mPrice;
        };
        this.copy = function () {};
        // 构造器
        this.setName(newName);
        this.setPrice(newPrice);
    }
})();
Book.prototype = {
    isJSBook: false,
    display: function () {
    }
}

使用:

var myBook = new Book("id","name","price");

使用方法与普通的是一致的。
但是如果不加new关键词的话

var myBook = Book("id","name","price");

当不使用new关键词的时候只会将Book执行一遍并且this指针为window
并且所有的值都在

可以使用将return的function写为一个私有的类,并且将外部的prototype写在里面,让闭包看起来更加的舒服,更像是一个整体。

2、对象的安全模式

在使用类的时候可能会忘记使用new关键词。这个时候调用就像上面说的那种。执行一遍代码,并且其中的this指向window。

可以使用安全模式避免忘记使用new的情况。

列子:

var Book = function (title,time,type) {
    if(this instanceof Book){
        this.title = title;
        this.time = time;
        this.type = type;
    }else{
        return new Book(title,time,type);
    }
}

本质可以看出就是加了一层判断。

3、js原型链对引用类型的无力。

当原型链上的值为引用的时候:

var test = function () {
}
test.prototype.nums = [1,2,3,4];
ins1 = new test();
ins2 = new test();
console.log(ins2.nums);
ins1.nums.push(5);
console.log(ins2.nums);

这里就可以看出来如果原型链上的值为引用类型的时候会出现问题。

4、多继承

多继承的实现就是将父类们的所有属性进行拷贝到一个到当前类上。
当遇到引用类型的时候应当深拷贝,但是此处我们只讨论浅拷贝的问题。
以下代码为多继承:

var mix = function () {
    var len = arguments.length;
    var target = arguments[1];
    var arg;
    for(var i = 1;i < len;i++){
        arg = arguments[i];
        for(var property in arg){
            target[property] = arg[property];
        }
    }
    return arg;
}
5、多态

多态是对arguments里面的值得个数进行统计,根据不同的情况给予不同的回应。
简单例子

var add = function () {
    var len = arguments.length;
    switch (len) {
        case 0:
            return 10;
        case 1:
            return 10 + arguments[0];
        case 2:
            return arguments[0] + arguments[1];
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100580.html

相关文章

  • JavaScript设计模式之发布-订阅模式(观察者模式)-Part1

    摘要:设计模式与开发实践读书笔记。发布订阅模式又叫观察者模式,它定义了对象之间的一种一对多的依赖关系。附设计模式之发布订阅模式观察者模式数据结构和算法系列栈队列优先队列循环队列设计模式系列设计模式之策略模式 《JavaScript设计模式与开发实践》读书笔记。 发布-订阅模式又叫观察者模式,它定义了对象之间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖它的对象都将得到通知。 例...

    muzhuyu 评论0 收藏0
  • JavaScript设计模式之发布-订阅模式(观察者模式)-Part2

    摘要:设计模式与开发实践读书笔记。看此文章前,建议先看设计模式之发布订阅模式观察者模式在中,已经介绍了什么是发布订阅模式,同时,也实现了发布订阅模式。 《JavaScript设计模式与开发实践》读书笔记。 看此文章前,建议先看JavaScript设计模式之发布-订阅模式(观察者模式)-Part1 在Part1中,已经介绍了什么是发布-订阅模式,同时,也实现了发布-订阅模式。但是,就Part1...

    Charlie_Jade 评论0 收藏0
  • JavaScript设计模式之发布-订阅模式(观察者模式)-Part2

    摘要:设计模式与开发实践读书笔记。看此文章前,建议先看设计模式之发布订阅模式观察者模式在中,已经介绍了什么是发布订阅模式,同时,也实现了发布订阅模式。 《JavaScript设计模式与开发实践》读书笔记。 看此文章前,建议先看JavaScript设计模式之发布-订阅模式(观察者模式)-Part1 在Part1中,已经介绍了什么是发布-订阅模式,同时,也实现了发布-订阅模式。但是,就Part1...

    chemzqm 评论0 收藏0

发表评论

0条评论

plus2047

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<