zoukankan      html  css  js  c++  java
  • 《JavaScript高级程序设计》读书笔记 2

    1,动态模型模式

     1  function Person (name,age,job) {
     2            this.name=name;
     3            this.age=age;
     4            this.job=job;
     5            if(typeof this.sayName!='function'){
     6                Person.prototype.sayName = function(){
     7                    alert(this.name);
     8                }
     9            }
    10       }
    11       var friend=new Person('Nicholas',29,'Software Engineer');
    12       friend.sayName();

    在构造函数中初始化原型,同时保证了构造函数和原型的优点。这只会在初次调用构造函数时才会执行。

    2,寄生构造函数模式

     1  function SpecialArray(){
     2           //创建数组。
     3           var values=new Array();
     4           //添加值。
     5           values.push.apply(values,arguments);
     6           //添加方法
     7           values.toPipedString=function(){
     8               return this.join("|");
     9           };
    10           return values;
    11       }
    12       var colors=new SpecialArray("red","blues","green");
    13       alert(colors.toPipedString());

    假设我们想创建一个具有额外方法的的特殊数组。由于不能直接修改Array构造函数,因此可以使用这个模式。

    寄生的构造函数和构造函数的原型的原型属性没有关系。也就是说构造函数返回的对象与构造函数外部创建的对象没有什么不同。所以不能用instanceof 来确定对象类型。

    3,委托构造函数模式

    1  function Person(name,age,job){
    2           var o=new Object();
    3           o.sayName=function(){
    4               alert(name);
    5           }
    6           return o;
    7       }

    委托对象是指没有公共构造属性,而且其方法也不引用this的对象。委托对象最适合在安全的环境中,或者防止数据被其他程序改动的时候用。

    委托构造函数和寄生构造函数的亮点不同是:a,新创建对象的实例不用this,b,不使用操作符来调用构造函数。

    注意,这个对象,除了使用sayName()方法,没有其他方法可以访问name的值。

  • 相关阅读:
    Promise简单使用,需要在ES6以上
    uni-app条件编译:#ifdef #ifndef #endif
    js获取年月日
    js验证手机号、身份证等
    json.stringify()与json.parse()
    Vuex基本使用的总结--转载
    ...mapMutations前面的三个点什么意思
    制作缩略图、远程缩略图
    node整个环境的启动
    redis命令
  • 原文地址:https://www.cnblogs.com/lvyongbo/p/4742743.html
Copyright © 2011-2022 走看看