原生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];
}
原生js--类的扩充和类型检测的更多相关文章
- js常用的几种类型检测方式
类型检测方式 平时数据类型都是清晰明了的,但有些功能函数还是需要用到类型检测,现总结一下几种常见的类型检测方式: typeof instanceof Object.prototype.toString ...
- JS做类型检测到底有几种方法?看完本文就知道了!
JS有很多数据类型,对于不同数据类型的识别和相互转换也是面试中的一个常考点,本文主要讲的就是类型转换和类型检测. 数据类型 JS中的数据类型主要分为两大类:原始类型(值类型)和引用类型.常见的数据类型 ...
- JS 类型检测
typeof 适合函数对象和基本类型的判断 typeof 100instanceof 适合判断对象类型 obj instanceof Object 基于原型链判断操作符,若做操作符不是对象,则会直接返 ...
- JS数组类型检测
在强类型语言,数组类型检测是非常容易的事情(typeof就可以解决),而在弱语言JS数据类型就很容易混淆了. JS中常见的数据类型有:number.string.boolean.undefined.f ...
- 原生js实现类的添加和删除,以及对数据的add和update、view ,ajax请求 ,页面离开的操作
1 类操作 function hasClass(cla, element) { if(element.className.trim().length === 0) return false; var ...
- C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断
C#保留2位小数几种场景总结 场景1: C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.2 ...
- js安全类型检测
背景: 都知道js内置的类型检测,大多数情况下是不太可靠的,例如: typeof . instanceof typeof 返回一个未经计算的操作数的类型, 可以发现所有对象都是返回object ...
- js类型检测总结
类型检测: 类和对象: Call,Apply,Bind
- 原生js添加和删除类
原生js添加和删除类: this.className +=" "; this.className = this.className.replace(" 原来的类" ...
随机推荐
- C#.NET MVC 枚举转dictionary自动装载生成下拉框
/// <summary> /// 枚举转SelectListItem /// </summary> public class Enum_Helper { /// < ...
- Activiti5小试牛刀demo流程
demo流程目标:刚接触Activiti5,先大致了解下Activiti5的架构,熟悉下开发流程 搭建开发环境 首先给MyEclipse安装Activiti Designer插件,下载网址http:/ ...
- php中对象(object)与数组(array)之间的相互转换
/** * 数组 转 对象 * * @param array $arr 数组 * @return object */ function array_to_object($arr) { if (gett ...
- Linux学习笔记<五>——<Shell部分>
管道命令(pipe) 1.把一个命令的输出作为另一个命令的输入 ls -al /etc | less 2.选取命令:cut和grep cut命令可以将一段消息的某段切出来. -d接分隔符,-f是取出第 ...
- QQ彩票任意订阅内容导致骚扰用户
数据包: POST /my/index.php?mod=securityinfo&op=AjaxUpdateTipsSet HTTP/1.1 Host: 888.sports.qq.com C ...
- 按键精灵如何调用Excel及按键精灵写入Excel数据的方法教程---入门自动操作表格
首先来建立一个新的Excel文档,在桌面上点击右键,选择[新建]-[Excel工作表],命名为[新手学员]. 现在这个新Excel文档是空白的,我们接下来会通过按键精灵的脚本来打开并写入一些数据.打开 ...
- 在swift中使用线程休眠
C#和php都有sleep让线程休眠指定时间后再继续执行后面的代码,swift中应该如何呢?首先,找一下objective-c版本是怎么做的 [self performSelector:@select ...
- 适用于Win8的Office2003_SP3精简版集成各类补丁+兼容包
适用于Win8的Office2003_SP3精简版集成各类补丁+兼容包软件名称: Office 软件版本: Office2003_SP3 软件大小: 104M 软件语言: 简体中文 软件授权: 破解 ...
- Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14' not found问题
Centos的某个版本下编译了一个可执行程序,复制到另外一个Centos环境下去执行,结果出现了以下错误: /lib64/libc.so.6: version `GLIBC_2.14' not fou ...
- 关于python单方法的类
1.大部分情况下,你拥有一个单方法类的原因是需要存储某些额外的状态来给方法使用. 此种情况下可以使用闭包代替,参考 javascript的闭包计数器实现,python实现各种方法来实现计数器 关于这个 ...