JavaScript 对象篇

2018-11-18  本文已影响0人  花差花差小宝

javascript对象的继承和Object对象

对象的一个类可以从现有的类中派生,并且拥有现有的类的方法或是属性,这和过程叫做继承。被继承的类叫做父类或是基类,继承的类叫做子类。

  (一个对象拥有另一个对象的属性和方法)

优点:

  提高代码的重用性

  提高代码的可维护性

  提高代码的逻辑性

一、Object对象

    var obj=new Object()

    属性:

    1.constructor (Object 的属性)

      对创建对象的函数的引用(指针)。

      var obj=new Object();

      alert(typeof obj);

      alert(obj.constructor);//function

    2.//Prototype 原型 (函数的默认属性,函数属性就是对象的原型)

    var obj=new Object();

    function fun(){}

    alert(obj.prototype);//undefined

    alert(fun.prototype);//object

**********************************************

      prototype对函数对象的对象原型的引用。是函数对象的默认属性

**********************************************

          A.对象的共享属性存放到代码段当中。

          B.可以实现继承。

    方法:

      A。hasOwnProperty(property)

        判断对象是否有某个特定的属性

        var obj=new Fun();

        function Fun(){

        this.name='er'

    }

        obj.hasOwnProperty('name');

      B.IsPrototypeOf(object)

      判断该对象是否为另一个对象的原型。(用来检测对象的类型)

var arr=new Array();

alert(Array.prototype.isPrototypeOf(arr));

var obj=new Fun();

        function Fun(){

        this.name='er'

    }

alert(Fun.prototype.isPrototypeOf(obj));

      c.运算符

        instanceof

        var obj=new Fun();

        function Fun(){

        this.name='er'

    }

alert(obj instanceof Fun);

二、继承

  1.原型继承

  function Person(){

  this.name='saner';

  this.fun=function(){alert(this.name)}

  }

  function Student(){}

  Student.prototype=new Person();

  alert(Student.fun());

//stu 是不是 Person的子类

  alert(Person.prototype.isPrototypeOf(stu));

// stu 的对象类型是否相同;

alert(stu instanceof Person);

  2.对象冒充的形式

    A.call

    obj1.fun.call(obj2,[参数1......])

obj1冒充obj2

function Person(){

  this.names='saner';

  this.fun=function(){alert(this.names)}

  }

  function Student(){this.names='lisi'}

var stu=new Student();

var per=new Person();

per.fun.call(stu);//stu对象可以寄生per 只能执行per 中的方法

alert(stu instanceof Person);//对象类型是否一样

alert(Person.prototype.isPrototypeOf(stu))//stu是否是Person的子类;

stu.fun();//stu中并没有fun 函数,它只是寄生与Person对象,执行Person 的函数;

...........

-------------------以下是另一种写法---------

function Person(){

  this.names='saner';

  this.fun=function(){alert(this.names)}

  }

  function Student(){

  this.names='lisi';

  Person.call(this);//执行的完全是Person 的方法;

}

alert(stu instanceof Person);

alert(Person.prototype.isPrototypeOf(stu))

stu.fun();//可以调到fun方法 但是与Person并没有继承关系;

stu.names;//也可以执行Person中的属性;

    B.apply

      obj1.fun.call(obj2,[参数1,参数2....])

    让对象1的方法冒充成对象2的方法。

上一篇 下一篇

猜你喜欢

热点阅读