zoukankan      html  css  js  c++  java
  • javascript的面向对象程序设计(二)

    2.4.5 原型对象的问题;

    原型模式最大的特征是,在原型定义的属性,是被所有的实例所共有的,假如,原型对象有个属性时数组,你在实例上对这个数组添加元素,从而会改变所有实例都会受到影响

    2.5

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

    代码如下:

    function Person(name,age,job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.friend = ["zht","zgr"]
    
    }
    Person.prototype={
    constructor:Person,
     sayName:function(){
        alert(this.name);
     }
    
    }
    View Code

    这种模型方式集上述两种模式的长处;

    2.6 动态原型模式;

    还有一种方式,能够把代码都放在一个构造函数中;代码如下:

    function Person(name,age,job){
     this.name = name;
     this.age = age;
     this.job = job;
     if(typeof this.sayName != "function"){
         Person.prototype.sayName = function(){
            alert(this.name);
         }
     }
    }

    注意:if语句的地方;这里只有在sayName方法不存在的情况下,才会把它加到原型对象中,也就是说,这段代码只有初次调用这个构造函数的时候才会执行;

    2.6 寄生构造函数模式;

    暂时对寄生构造函数的理解跟工厂模式没有差,除了把封装的那个函数叫做构造函数外,其他与工厂模式是一样的;(以后稍加学习);

    2.7 稳妥构造函数模式;

    所谓稳妥对象,指的是没有公共属性,而且其方法也不调用this对象;根据稳妥的要求,我们把Person的构造函数重写下,代码如下:

    function Person(name,age,jon){
      var o = new Object();
      //可以在这里添加私有变量和方法;
     // 添加方法;
     o.sayName = function(){
      alert(name);
    
     }
    // 返回对象;
    return o;
    }
  • 相关阅读:
    vue路由动态过渡效果
    完美解决safari、微信浏览器下拉回弹效果
    从零开始搭建VUE项目
    上传图片(photoClip)
    手机移动端input date placehoder不显示
    evaluate-reverse-polish-notation
    Minimum Depth of Binary Tree
    前端学习02-01分帧的作用
    前端学习02-01表格标签
    前端学习01-07图像地图
  • 原文地址:https://www.cnblogs.com/zht0915/p/4674041.html
Copyright © 2011-2022 走看看