首页 > 其他 > 详细

关于面向对象封装的一些理解

时间:2016-08-04 21:28:13      阅读:261      评论:0      收藏:0      [点我收藏+]

-----》 为了解决从原型对象生成实例的问题,Javascript提供了一个构造函数(Constructor)模式。

   

  1.构造函数模式

  

//构造函数模式

    function Cat (name,color){
        this.name = name;
        this.color = color;
    }

    var cat1 = new Cat(‘大毛‘,"红色");
    var cat2 = new Cat(‘二毛‘,‘黑色‘);

    console.log(cat1.name) //大毛
    console.log(cat1.constructor == Cat); //true;同时指向的Cat; 
    console.log(cat2.constructor == Cat); //true;同时指向的Cat;

    //存在的问题  我们在函数内添加俩个不变的属性,每一次生成一个实例,都必须为重复的内容,占用内存;
    // 这样就使得每个实例同时指向原型对象

    Cat.prototype.type = ‘猫科动物‘
    Cat.prototype.eat = function (){
        alert(‘吃老鼠‘)
    }



    // 为了配合prototype属性,Javascript定义了一些辅助方法,帮助我们使用它。

    //这个方法用来判断,某个proptotype对象和某个实例之间的关系。
    alert(Cat.prototype.isPrototypeOf(cat1)); //true
  alert(Cat.prototype.isPrototypeOf(cat2)); //true
    
    //hasOwnProperty 判断属性本地属性还是继承属性;
    alert(cat1.hasOwnProperty("name")); // true
  alert(cat1.hasOwnProperty("type")); // false

    // 每个实例对象都有一个hasOwnProperty()方法,用来判断某一个属性到底是本地属性,还是继承自prototype对象的属性。
    alert(cat1.hasOwnProperty("name")); // true
  alert(cat1.hasOwnProperty("type")); // false

    // in运算符可以用来判断,某个实例是否含有某个属性,不管是不是本地属性。
    alert("name" in cat1); // true
  alert("type" in cat1); // true

    // in运算符还可以用来遍历某个对象的所有属性。
    for(var prop in cat1) { alert("cat1["+prop+"]="+cat1[prop]); }

 

关于面向对象封装的一些理解

原文:http://www.cnblogs.com/my-effort/p/5737981.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!