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 用来遍历所有属性
posted @ 2017-02-19 10:08  明阳春秋  阅读(207)  评论(0编辑  收藏  举报