原生js--类的扩充和类型检测

扩充类的方法:

1、向原型对象上添加方法或属性。例如:Number.prototype.cl = function(){};

  但这种做法并不推荐,因为ES5之前,无法将这些新添加的方法或属性设置为不可枚举的。他们可以在for/in循环中被遍历到

2、使用ES5提供的扩展对象的方法:Object.definePropery()。

  在web浏览器环境下,可以通过Object.defineProperty()方法给HTMLElement.prototype添加方法,从而使表示HTML标记的所有对象可以继承该方法。但该方法尚未被普及,实用方面有限制

 

类型检测:

1、typeof关键字:无法检测对象的类型

2、instanceof关键字和isPrototypeOf方法

  可以检测对象的继承关系,检测出在对象的原型链上是否存在某个特定的原型对象

  缺点:

    a、无法通过对象获得类名,只能检测对象是否属于指定的类名

    b、多窗口和有框架子页面的web应用中不兼容,因为每个窗口和框架子页面都具有单独的执行上下文,每个上下文都包含独立的全局变量和构造函数。

3、constructor属性

  可以检测到对象的类名

  缺点:同instanceof关键字一样,无法兼容多窗口或框架子页面环境

4、构造函数的名称(name属性)

  可以兼容多窗口或框架子页面

  缺点:构造函数的name属性并不是一个标准的属性,存在兼容性问题,解决方法是如果没有name属性,可以将构造函数转换成字符串然后提取函数名

  Function.prototype.getName = function(){
      if( "name" in this ) return this.name;
      return this.name = this.toString().match( /function\s*([^(]*)\(/)[1];
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值