js对象(封装、继承)

1、原始模式

 var Cat = {

    name : '',

    color : ''

   } 

var cat1 = {}; // 创建一个空对象

cat1.name = "大毛"; // 按照原型对象的属性赋值

cat1.color = "黄色";

 

这样有两个缺点,一是如果生成多个实例,写起来很麻烦,二是实例与原型看起来没有什么联系。

 

 

 

2、改进

  function Cat(name,color) {

    return {

      name:name,

      color:color

    }

  }

var cat1 = Cat("大毛","黄色");

 

这样解决了代码重复问题,但还是不能反映出他们是同一个原型对象的实例。

 

 

 

3、再改进,构造函数模式:

  function Cat(name,color){

    this.name=name;

    this.color=color;

  }

  var cat1 = new Cat("大毛","黄色");

  var cat2 = new Cat("二毛","黑色");

这时cat1和cat2会含有一个constructor属性,指向他们的构造函数。

alert(cat1.constructor == Cat); //true

 

 

 

4、再改进,prototype模式:

构造函数模式有一个弊端,有一些共用的属性和方法,每次生成一个实例,都会重复生成,造成内存浪费。

直到现在的prototype模式:没一个构造函数都有一个prototype属性,指向另一个对象,这个对象的所有属性和方法,都会被构造函数的实例继承。

所以共用的属性和方法,可以定义在prototype对象上。

cat.prototype.type=“猫科动物”;

Cat.prototype.eat = function(){alert("吃老鼠")};

alert(cat1.type); // 猫科动物

 

 

------------------------------------------------------------继承--------------------------------------------------------------

 function Animal(){

    this.species = "动物";

  }

 function Cat(name,color){

    this.name = name;

    this.color = color;

  }

cat如何继承animal?

 

prototype模式

  Cat.prototype = new Animal();

  Cat.prototype.constructor = Cat;

  var cat1 = new Cat("大毛","黄色");

  alert(cat1.species); // 动物

 

每个prototype对象都有一个constructor属性,指向它的构造函数。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值