JavaScript类和类型

类和类型

JavaScript定义了少量的数据类型:unll,undefined,boolean,number,string,object,function,这些类型可以使用type of方法得到其类型。

JavaScript内置对象可以通过class属性类区分彼此自定义类可以使用:instanceof运算符,constructor属性以及构造函数的名字来区分

instanceof运算符

instanceof运算符,左侧是待检测的对象,右侧是指定的构建函数,例如:o继承自,c.prototype,则表达式o instanceof c值是true.这里的继承可以不是直接继承,如果是隔代继承其结果也是true.
另外我们可以使用isPrototypeOf()方法来检测对象是否在定义的原型连上。

缺点:1.无法通过对象来获得类名,只能通过检测对象是否属于指定的类名。2.在多窗口中的兼容性不佳。每个窗口和框架自页面都具有单独的上下文,每个上下文都包独有的全局变量和一组构造函数。在两个不同框架页面中创建的两个数组继承自两个相同但相互独立的原型,在一个框架页面中Array()构造函数的实例,不是另外一个框架页面的实例,instanceof运算结果为false.

constructor属性

另一种识别对象是否属于某个类的方法是使用constructor属性。因为构造函数是类的公共标识所以最直接的方法就是使用constructor属性,通过获取其构造函数来判断构造函数。
缺点:1.浏览器窗口中的每个窗口页面拥有自己独立的构造函数集合,一个框架页面中的Array构造函数和另外一个框架函数中的Array不是同一个构造函数。2.JS对象中的新建对象一般都含有constructor属性,但是并非所有的原型上都会又constructor属性

使用构造函数的名称

使用构造函数的名称而不是构造函数本身作为表示符。一个窗口的Array构造函数和另外一个窗口的Array构造函数不相等的,但他们名字一样的。在一些JavaScript中为函数提供了非标准的属性name,用来表示函数的名称

鸭式辩型

这个方法是用来规避上述判断类型是否相等的技术的产生的问题的,即不去关注类之间是否有继承关系而是关注“类能做什么”,对javascript的程序员来说“能像鸭子一样走路,像鸭子嘎嘎叫的鸟就是鸭子”
使用该方法进行匹配时应该注意匹配内置函数时应该使用,getOwnPrototypeNames(), 来判断使用for/in时因为内置函数的属性是enumerable:false的。不可枚举的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值