面向对象编程

面向对象编程

构造函数

所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量。 构造函数使用new生成实例对象,this变量会绑定在实例对象上。

function Cat(name,color){
    //nameFn会是生成的实例对象的属性
    this.nameFn=name;
    this.colorFn=color;
  }

var cat1=new Cat('大毛','黑色');

cat1.nameFn//大毛

//constructor属性会指向构造函数
cat1.constructor == Cat;//true

//验证一个实例对象的原型
cat1 instanceof Cat;//true

prototype属性

每个构造函数的prototype属性指向一个对象,实例会继承所有的属性与方法。

hasOwnProperty()

用来判断某一个属性到底是本地属性,还是继承自prototype对象的属性。

in 判断某个实例是否含有某个属性,不管是不是本地属性。

call与apply

两者作用一致,都是把obj(即this)绑定到thisObj,这时候thisObj具备了obj属性方法。或者说thisObj继承』了obj的属性和方法。

也可以当成,把obj上的方法,放到thisObj上执行。

bind()与call()相似,但不会立即执行。

参数是null或者undefined,等于将this绑定到全局对象。

参考1 参考2

bind()

bind()方法会创建并返回一个新函数,称为绑定函数。

当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为 this,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。

bind()函数可以使用预设的初始参数。

this的用法

随着this的使用场合,this的值会发生变化。 总共有四种方式:

  • 纯粹的函数调用

函数体内调用this,代表全局对象Global

  • 作为对象的方法调用

函数还可以作为某个对象的方法调用,这时this就指这个上级对象。

  • 作为构造函数调用

所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象。

  • apply调用

apply()是函数对象的一个方法,用来改变函数的调用对象。this指的就是这个参数。

apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。

参考

Last updated

Was this helpful?