关于内置对象与构造函数的若干问题

1String按道理是一个构造函数的名称,但为什么也具有一些属性和方法?

这是之前在学习String的包装类时,遇见一个问题,

这是因为任何函数实际上都是Function类的一个实例,所以f.__proto === Function.prototype,返回的是true,如下

Function.prototype作为一个对象又是Object类的一个实例,所以Function.prototype.__proto__ === Object.prototype,,如下

也可以描述为,Fun.__proto__.__proto__ === Object.prototype,如下

所以,Fun必然会存在一些从原型链上继承的方法和属性

当然String也是如此,如下

2关于Array()与 new Array() 效果相同的问题?

描述:作为构造函数,按道理需要在前边加new才能构造出实例对象,但是对于Array、Object这些构造函数却比较特殊,有没有new却都能返回一个实例对象。除此之外,String、Number、Boolean也是如此

在网上找到了一些解答:

https://segmentfault.com/q/1010000008676899,第一个被采纳的回答,利用说内置的对象的构造函数中有判断是否带new 的判断,即

this instanceof Object的判断,

如果没写new的话,this通常指向的是window,肯定不是Point的实例。所以进入if里边,重新生成一个实例。

实际上,大部分的内置对象都具有如此的特性,《JavaScript高级程序设计》p130的一句话“开发人员不必显示地实例化内置对象,因为它们已经实例化了。”我猜这句话说明的就是这种特性。

大部分,当然也有特殊,

  • Date对象就比较特殊,

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date,按照这上边所说的,

实际上确实如此。

  • Math对象也比较特殊

实际山,Math是不允许实例化,如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值