zoukankan      html  css  js  c++  java
  • JavaScript设计模式——原型模式

      原型模式:

         原型模式是指原型实例指向创建对象的种类,并通过拷贝这些原型创建新的对象,是一种用来创建对象的模式,也就是创建一个对象作为另一个对象的prototype属性;

         prototype警告:学习了解原型模式前需先学习原型、原型链、prototype、__proto__、constructor等知识;(https://www.cnblogs.com/dengyao-blogs/p/11481326.html

      

      实现原型模式:

        ES5中的API:Object.create(prototype, optionalDescriptorObjects)

          Object.create()方法接收两个参数:第一个参数是__proto__对象,第二个是prototiesObject(可选,使用第二个参数可以初始化额外的其他属性,接受字面量对象形式);

        

    var vehiclePrototype = {
        model:"保时捷",
        getModel: function () {
            console.log('车辆模具是:' + this.model);
        }
    };
    
    var vehicle = Object.create(vehiclePrototype,{
        "model":{
            value:"法拉利"
        }
    });
    
    vehicle.getModel();  //车辆模具是:法拉利

      我们使用Object.create实际上是新建了一个对象vehiclePrototype,并且继承了vehiclePrototype的方法,所以此时vehicle.__proto__ == vehiclePrototype;

      第二个参数中初始化了"model"的值,将model的值初始化为了"法拉利",所以此时新创建的对象vehiclePrototype中只有一个model,值为"法拉利";

      

      不用Object.create()实现,用prototype:

        

    var vehiclePrototype = {
        init: function (carModel) {
            this.model = carModel || "保时捷";
        },
        getModel: function () {
            console.log('车辆模具是:' + this.model);
        }
    
    };
    
    function vehicle(model) {
        function F() { };
        F.prototype = vehiclePrototype;    
        var f = new F();
        f.init(model);
        return f;
    }
    var car = vehicle('法拉利');
    car.getModel();  // 车辆模具是:法拉利
    
    

      上述代码中,我们可以看到核心是在vehicle中,我们先创建了一个新的构造函数,然后将该函数的原型指向vehiclePrototype,然后进行实例化该函数,最后继承之后调用prototype上的init方法,最后将执行结果进行返回也是同样可以实现的;

      原型模式在JavaScript中无处不在,其他模式中有很多也是基于prototype来实现的,所以好好学习、复习原型和原型链的知识很重要,重点是prototype、__proto__、constructor等关键属性知识点;

    
    
    
  • 相关阅读:
    springloud系列搭建注册中心
    在生产环境下禁用swagger
    consul怎么在windows下安装
    linux上传与下载
    使用git将本地代码提交到码云上去
    springboot整合activemq(三)配置文件
    springboot整合activemq(二),消费均匀分析
    Python3学习之路~3.2 递归、函数式编程、高阶函数、匿名函数、嵌套函数
    Python3学习之路~3.1 函数基本语法及特性、返回值、参数、局部与全局变量
    Python3学习之路~2.9 字符编码与转码
  • 原文地址:https://www.cnblogs.com/dengyao-blogs/p/11671839.html
Copyright © 2011-2022 走看看