JavaScript----面向对象

面向对象

一,面向对象

传统面向对象----也称OPP,典型特点:具有类的概念

通过类可以创建多个具有相同属性和方法的对象。

Javascript面向对象 ---- 叫做函数式的面向对象

通过【函数】模拟,实现【面向对象】的特点

二,面向对象的几种方法:

1,Javascript对象声明:

缺点:每个对象必须独立声明和设定

2,工厂模式

优点:精简代码,封装对象-----将相同代码封装到一个函数中,通过传参进行调用
解决重复实例化的问题。

缺点:如果多个不同函数同时声明对象,则无法准确定位对象实例的引用归属

       function obj(name,sex){
          Var obj = new Object();
          obj.name = name;
          obj.sex = sex;
          obj.go = function(){
               alert(this.name + ‘--’ + this.sex);
           }
           return obj;
        }

            Var obj1 = obj(‘帅男’,’男’);
            Var obj2 = obj(‘妹妹’,’女’);

3,构造函数声明 ------【对象独立】

     function Box() {  }     var obj = new Box();

优点:构造函数声明,对象会在后台,自动生成并返回出来。解决了对象能够准确识别的问题。

不同的构造函数,创立的对象是独立的。

对象所属判断:对象 instanceof 构造函数

例如:box instanceof Box;

【注意】:1,构造函数声明对象,必须要通过new方法声明才行。
2,声明对象实例的【引用地址】都是相互独立的。

   function Box(name,age){

         this.name = name;

         this.age = age;

         this.run = function(){

               Return this.name+this.age;

           }
     }

    function Pox(name,age){

         this.name = name;

         this.age = age;

         this.run = function(){

               Return this.name+this.age;

           }
     }

     Var box1 = new Box(‘小明’,26)
	Var box2 = new Pox(‘小张’,30)

注意:声明的对象,内容程序都一样,但都是相互独立存在的

【二】, 原型属性----prototype属性-----【对象共享】

函数中默认具有【prototype属性】--------这个属性也是一个【对象】

【功能】:实现通过【同一个构造函数】声明的【不同对象】都具备相同的【属性】和【方法】。

function Box(){}

Box.prototype.name = “羊吃草吗”;

Box.prototype.age = 24;

Box.prototype.run = function(){

   return this.name + this.age;

}

Var box2 = new Box();

Var box1 = new Box();

【注意】:1, 声明对象的【引用地址】都是【同一引用地址】。

2,生成的对象的【属性】、【方法】都是一样的。

3, 【构造函数】里面的【属性或方法】比【原型设定】的优先级高。

4,【原型】的【属性】和【方法】一旦设定后,就不会改变。

【原型初始化】时,【实例对象】的数据都会保持一致。

5,【实例对象】是可以修改的,则修改后的数据不共享,都是相互独立的。

6,获取【属性和方法】如果【实例中没有】,就会向【原型】中找。

【三】,构造函数 + 原型链 生成对象

function Box(age,name){
this.age = age;
this.name = name;
this.arr = [1,2,3,4,5];
}

Box.prototype.run = function(){
return this.age + '---' + this.name;
}

var box1 = new Box(24,'张三');
var box2 = new Box(22, '李四');

//----继承

function Child(age,name){
Box.call(this,age,name);
}

Child.prototype = new Box();

var child = new Child(66,'王五');
alert(child.name);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值