JavaScript 静态方法和动态方法以及他们的不同

(function(){
var BaseClass =function (){}
BaseClass.staticMethod = function(){
alert(‘staticMethod ‘);
}
BaseClass.prototype.instaceMethod = function(){
alert(‘instaceMethod ‘);
}

var instace = new BaseClass();
BaseClass.staticMethod();//staticMethod
instace.instaceMethod();//instaceMethod
instace.staticMethod();//不输出
BaseClass.instaceMethod();//不输出
})()

结论就可以得出静态方法是类直接调用,实例方法要new 出来的对象才能调用。

instace.staticMethod();//不输出 这一点说明instace跟BaseClass本质上依然是两个独立的对象,正常情况下不能相互访问内部元素。

BaseClass.instaceMethod();//不输出 这里引出一个疑问,为什么定义在自己的prototype属性上的方法自己却不能访问,new一下就能访问了呢?

首先来看BaseClass为什么不能访问instaceMethod。

通过alert(typeof(BaseClass.prototype))输出object,所以prototype也是一个对象,所以BaseClass.prototype跟BaseClass是两个相互独立的对象,没有必要转化的话做不到相互访问。

为什么会造成这种差异呢?这需要看new都做了什么:

var instace = new BaseClass();相当于

  1. var instace = {};//创建新的object对象,所以他的数据类型是object
  2. instace .__proto__ = BaseClass.prototype;//获取原型链,所以instace 能访问BaseClass.prototype
  3. BaseClass.call(instace);//对象替换,instace替换掉BaseClass

以上可以看出JavaScript 静态方法和动态方法有本质的不同,静态方法就是本身自己的方法,而动态方法是prototype上的方法。

未经允许不得转载:前端撸码笔记 » JavaScript 静态方法和动态方法以及他们的不同

上一篇:

下一篇: