Object函数在Javascript中与“;新的“;关键字
What does the Object function do in Javascript when used with the "new" keyword?
在这个答案中,我指示提问者不要覆盖Javascript中的原生Object
函数,因为我认为它会打乱对象创建过程。
但后来,我思考了一下,发现所有对象实际上都不太可能使用这个函数和new
关键字创建。
例如,当使用文字符号(var a = {...}
)创建对象时,是否使用它?或者它只是做this = {}
?真的有可能给this
赋值吗?
我看到了这个类似的问题,显然Object
在没有new
关键字的情况下使用时表现不同。。。该功能实际是如何实现的?
您可以在Chrome/V8中覆盖Object,如果这样做,就会发生不好的事情。键入以下内容会得到这些响应。
> Object
function Object() { [native code] }
> Number
function Number() { [native code] }
查看Number.prototype,我们可以看到一整套方法和Object作为Number的原型:
Number
constructor: function Number() { [native code] }
toExponential: function toExponential() { [native code] }
toFixed: function toFixed() { [native code] }
toLocaleString: function toLocaleString() { [native code] }
toPrecision: function toPrecision() { [native code] }
toString: function toString() { [native code] }
valueOf: function valueOf() { [native code] }
__proto__: Object
__defineGetter__: function __defineGetter__() { [native code] }
__defineSetter__: function __defineSetter__() { [native code] }
__lookupGetter__: function __lookupGetter__() { [native code] }
__lookupSetter__: function __lookupSetter__() { [native code] }
constructor: function Object() { [native code] }
hasOwnProperty: function hasOwnProperty() { [native code] }
isPrototypeOf: function isPrototypeOf() { [native code] }
propertyIsEnumerable: function propertyIsEnumerable() { [native code] }
toLocaleString: function toLocaleString() { [native code] }
toString: function toString() { [native code] }
valueOf: function valueOf() { [native code] }
但是如果我们覆盖对象
Object = {}
Number的原型有点不稳定:
Number.prototype
> Number
...empty...
由于Object是层次结构的根,如果将其重新分配给另一个对象,则会有点矛盾。
使用文字表示法得到的对象与使用函数表示法获得的对象相同。证明:
> ({}).__proto__ === new Object().__proto__
true
> new Object().__proto__ === Object.prototype
true
这意味着左侧和右侧的对象是从同一个原型创建的,即Object.prototype
Object函数是用来尝试将某个对象作为对象的,如果你不传递任何参数,它将构造一个null对象,因此它是一个空对象。
var a = new Object(); // a is {}
var b = new Object("1"); // b is an object which store 1 as a string.
/*
JS console says:
String
0: "1"
length: 1
*/
var c = new Object(1); // c is an object which store 1 as an integer.
/*
JS console says:
Number
//There is no other property or method here.
*/
我在没有新关键字的情况下尝试了它,但没有任何变化。所有对象都与上面的对象相同。
希望这能解决你的好奇心。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 使用jquery将mysql数据获取到新的表行中
- 操作员”;新的“;根据我想在几个JavaScript文件中使用的类,在JavaScript中使用
- Javascript 新的 Array 和 join() 方法
- javascript处理一个对象数组以获得一个新的对象数组
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 一次又一次地在新的和相同的选项卡中打开一个url
- 为什么要做新的.Date()与new相差1小时.日期().到ISOString()
- 为什么我们在ES2015中需要一个新的for循环结构,而我们已经有了for、forEach
- 可以在Javascript中添加新的关键字吗
- 在编译阶段后创建新的DOM树,或者继续使用原始修改的DOM
- Object函数在Javascript中与“;新的“;关键字
- Javascript新的关键字代码解释请求
- 为什么我们需要“;新的“;关键字
- Javascript”;新的“;关键字引用“;类“;属性
- “;新的“;关键字工作,如ECMAScript 5标准中所述
- Javascript Bookmarklet,写入元关键字到新的(浏览器)选项卡
- ";新的";在JS中克隆对象时使用的关键字
- 关键字“”的含义;新的“;在javascript中