zoukankan      html  css  js  c++  java
  • JavaScript 面向对象的程序设计记录笔记4

    组合使用构造函数模式和原型模式:

      

    function Person(name, age, job){
      this.name = name;
      this.age = age;
      this.job = job;
      this.friends = ['Shelby', 'Court'];    
    }
    
    Person.prototype = {
      connstructor: Person,
      sayName: function(){
        return this.name;
      }    
    }
     var person1 = new Person('Tom', 23, 'software engineer');
     var person2 = new Person('Jack', 24, 'doctor' );
     person1.friend.push('Var');
    
    console.log(person1.friend); // 输出'Shelby', 'Court',‘Var’
    console.log(person2.friend); //  输出'Shelby', 'Court',
    console.log(person1.friend === person2.friend); // false
    console.log(person1.sayName === person2.sayName); // true
    

     由于sayName方法都属于prototype属性上,所以person1.sayName 与 person2.sayName相同,都引用同一地址。

    动态原型模式

    function Person(name, age){
        this.name = name;
        this.age = age;
        if (typeof this.sayName === 'fucntion') {
         Person.prototype.sayName = function() {
             alert(this.name);
        }   
    }    
    
    // 当第一次创建Person实例对象的时候,由于当前不存在syaName方法,则会执行if中的语法块,将sayName方法放到共享对象prototype上, 当之后实例Person对象的时候,由于已经存在sayName属性,则不会进行创建。
    

    寄生构造函数:(寄生构造函数与工厂模式类似,区别在于多了一个new标示)

    function Person(name, age){
        var o = new Object();
        o.name = name;
        o.age = age;
        o.sayName = function(){
            alert(this.name);
        }
        return o;
    }  

      

    稳妥构造函数模式

      稳妥对象:所谓的稳妥对象,指的是没有公共属性,而且其他方法也不用引用this对象。稳妥对象最适合在一些安全的环境中,或防止数据被其他应用改动时使用。

  • 相关阅读:
    思考-少写代码
    app上传 那些事儿!
    vs2010 找不到本地服务器
    如何成为一名优秀得程序员
    python成功之路,Day2-判断和循环语句
    python成功之路,Day1-发展历史
    ES6学习笔记2-字符串扩展
    ES6学习笔记1-解构赋值
    数组的方法
    ES6
  • 原文地址:https://www.cnblogs.com/lzj0824/p/6964443.html
Copyright © 2011-2022 走看看