扩充类的方法:

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];
  }

原生js--类的扩充和类型检测的更多相关文章

  1. js常用的几种类型检测方式

    类型检测方式 平时数据类型都是清晰明了的,但有些功能函数还是需要用到类型检测,现总结一下几种常见的类型检测方式: typeof instanceof Object.prototype.toString ...

  2. JS做类型检测到底有几种方法?看完本文就知道了!

    JS有很多数据类型,对于不同数据类型的识别和相互转换也是面试中的一个常考点,本文主要讲的就是类型转换和类型检测. 数据类型 JS中的数据类型主要分为两大类:原始类型(值类型)和引用类型.常见的数据类型 ...

  3. JS 类型检测

    typeof 适合函数对象和基本类型的判断 typeof 100instanceof 适合判断对象类型 obj instanceof Object 基于原型链判断操作符,若做操作符不是对象,则会直接返 ...

  4. JS数组类型检测

    在强类型语言,数组类型检测是非常容易的事情(typeof就可以解决),而在弱语言JS数据类型就很容易混淆了. JS中常见的数据类型有:number.string.boolean.undefined.f ...

  5. 原生js实现类的添加和删除,以及对数据的add和update、view ,ajax请求 ,页面离开的操作

    1 类操作 function hasClass(cla, element) { if(element.className.trim().length === 0) return false; var ...

  6. C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断

    C#保留2位小数几种场景总结   场景1: C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.2 ...

  7. js安全类型检测

    背景: 都知道js内置的类型检测,大多数情况下是不太可靠的,例如:  typeof  . instanceof typeof 返回一个未经计算的操作数的类型, 可以发现所有对象都是返回object  ...

  8. js类型检测总结

    类型检测: 类和对象: Call,Apply,Bind

  9. 原生js添加和删除类

    原生js添加和删除类: this.className +=" "; this.className = this.className.replace(" 原来的类" ...

随机推荐

  1. Python中的base64模块

    本文介绍Python 2.7中的base64模块,该模块提供了基于rfc3548的Base16, 32, 64编解码的接口.官方文档,参考这里. 该模块提供两套接口,传统接口基于rfc1521的Bas ...

  2. Activiti5.16.4部署小记

    版本说明 OS:Win7 JDK:jdk1.6.0_45 Tomcat:apache-tomcat-7.0.62(解压缩版) 部署过程 1.安装JDK,配置环境变量,so easy,具体过程就不写了, ...

  3. MySql:charset和collation的设置

    From: http://www.2cto.com/database/201302/189920.html MySql:charset和collation的设置   charset 和 collati ...

  4. exportfs命令 NFS客户端问题 FTP介绍 使用vsftpd搭建ftp

    exportfs命令 • 常用选项 • -a 全部挂载或者全部卸载 • -r 重新挂载 • -u 卸载某一个目录 • -v 显示共享目录 • 以下操作在服务端上 • vim /etc/exports ...

  5. 8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重定向 

    8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重定向 什么是shell? shell是一个命令解释器,提供用户和及其之间的交互 致辞特定语法,比如逻 ...

  6. ng-bind-html-unsafe的替代

    angular 1.2以后(或更早?)移除了ng-bind-html-unsafe,那么我要用这个directive来绑定html代码怎么办?随便一测试,它是不支持把html直接传给它的: //htm ...

  7. python-类的方法与类的成员

    preface include: @classmethod @staticmethod @property 私有属性 类的成员 #!/usr/bin/env python class animal(o ...

  8. Synycovery 7.18f 一个优秀的同步软件

    Serial Key Name: Vdown RG Code: MCKOFA7MNGUQY7954

  9. linux 安装 Django 安装

    下载源码包:https://www.djangoproject.com/download/ 输入以下命令并安装: tar xzvf Django-X.Y.tar.gz # 解压下载包 cd Djang ...

  10. WIN7隐藏GUEST登录账户

    在Windows7中,我们有时候需要开启Guest用户,以方便给别的同事共享打印机和部分文件,但同时又不希望别人用Guest账号从本地登陆界面进入本机.这个时候就需要将本地登陆界面的Guest用户进行 ...