zoukankan      html  css  js  c++  java
  • js面向对象实现方式的演变及常用方法

     面向对象三大特性:封装,继承,多态。
    1.原始模式
    var obj = new Object();  obj.name = name; obj.sex = sex;
    obj.showName = function(){                
         alert("我的名字叫"+this.name)
    }
    obj.showSex ......
    var Cat = {}   也可以用json的方式创建   原理相同
     
    2.工厂模式
    容易理解版
    function createPerson(name,sex){
         // 原料  
          var obj = new Object();
          //加工    
         obj.name = name;
         obj.sex = sex;
         obj.showName= function(){
             alert('我的名字叫'+this.name); 
         }
         //出厂
    }
    json版
    function Cat(name,color){
         return {
              name: name,
              color: color,
              showNamr: function(){
                  alert('我的名字叫'+this.name);  
              }
         }
    }
    缺点:没有new,创建多个副本,代码不够简洁
    3.构造函数模式
    function Cat(name,color){
         this.name = name;
         this.color = color;
    }
    var cat1   = new Cat("大象","黄毛");
    new的作用:1.系统自动创建一个对象 2.将内部的this指向这个创建的对象 3.返回这个对象
    缺点:依旧创建多个副本浪费内存资源 
    4.原型模式(混合法)
    function Cat(name,colot){
         this.name = name;
           this.color = color;
    }
    Cat.prototype.type = " 猫科动物";
    Cat.prototype.eat = function(){
         alert("吃老鼠");
    }
    问题注意
    alert(cat1.eat == cat2.eat); //true
    type和eat就指向同一块内存区域了
    Cat即是类也是构造函数在js里是部分家的
    构造函数首字母大写
    原型上方法属性和实例行间赋予的方法属性  行间优先级较高会替换原型上的方法属性
     
    5.面向对象常用到的方法
    prototype 属性使您有能力向对象添加属性和方法(也就就是java中的类的方法)
    constructor: 返回此对象创造它的函数的引用(构造函数)
    instanceof: 判断对象是不是 一个构造函数的实例
     
    isPrototypeOf() 判断prototype对象和实例之间的关系
    Cat.prototype.isPrototypeOf(cat1);
    hasOwnProperty() 判断属性是行间本地属性还是 集成prototype
    cat1.hasOwnProperty('name')属于自己返回true
    in 判断是否包含某个属性 不管是本地还是原型上
    “name” in cat1
    in 用来遍历所有属性
  • 相关阅读:
    Linux内核RPC请求过程
    二分图
    Java实现 蓝桥杯 算法提高 合并石子
    Java实现 蓝桥杯 算法提高 合并石子
    Java实现 蓝桥杯 算法提高 摩尔斯电码
    Java实现 蓝桥杯 算法提高 摩尔斯电码
    Java实现 蓝桥杯 算法提高 文本加密
    Java实现 蓝桥杯 算法提高 文本加密
    Java蓝桥杯 算法提高 九宫格
    Java蓝桥杯 算法提高 九宫格
  • 原文地址:https://www.cnblogs.com/LiSuSpAu/p/6414849.html
Copyright © 2011-2022 走看看