Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数学不是';不是构造函数,但它有_Javascript_Constructor - Fatal编程技术网

Javascript 数学不是';不是构造函数,但它有

Javascript 数学不是';不是构造函数,但它有,javascript,constructor,Javascript,Constructor,这里有一个我搞不懂的问题。正如我从MDN中读到的,我们无法从Math创建实例。运行new Math()将产生异常Math不是构造函数。但是Math在Math.constructor中有自己的属性。是的,它是Object类型,但我们可以运行它Math.constructor()。但即使我们通过execMath.constructor=Function.constructor重新定义它,它也会抛出一个异常 现在我脑子里有了一些假设: 构造函数包含一个隐藏属性,浏览器引擎拒绝调用它 < LI>在浏览

这里有一个我搞不懂的问题。正如我从MDN中读到的,我们无法从
Math
创建实例。运行
new Math()
将产生异常
Math不是构造函数。但是Math在
Math.constructor
中有自己的属性。是的,它是
Object
类型,但我们可以运行它
Math.constructor()
。但即使我们通过exec
Math.constructor=Function.constructor重新定义它,它也会抛出一个异常

现在我脑子里有了一些假设:

  • 构造函数包含一个隐藏属性,浏览器引擎拒绝调用它
  • < LI>在浏览器引擎中,构造函数被解释成特殊C++对象,它在“Type Error:不是构造函数”集合中有索引。李>
有人能彻底回答我为什么构造函数存在,但我不能创建实例吗

提前感谢。

发件人:

所有对象都从其原型继承构造函数属性:

var o = {};
o.constructor === Object; // true

var a = [];
a.constructor === Array; // true
Math
只是一个预定义的全局对象,因此:

Math.constructor === Object;

尽管很少使用,
var obj=new Object()
是有效的javascript
var obj={}
更常见、更短;改用它。

来自:

所有对象都从其原型继承构造函数属性:

var o = {};
o.constructor === Object; // true

var a = [];
a.constructor === Array; // true
Math
只是一个预定义的全局对象,因此:

Math.constructor === Object;


尽管很少使用,
var obj=new Object()
是有效的javascript
var obj={}
更常见、更短;用它来代替。

引用我自己的话,答案是

因为说明书上是这么说的

数学对象

Math对象是具有某些命名属性的单个对象, 其中一些是函数

数学对象的
[[Prototype]]
内部属性的值为 标准内置对象原型对象(15.2.4)。价值 数学对象的
[[Class]]
内部属性是“Math”

数学对象没有
[[Construct]]
内部属性;它是 无法将Math对象用作具有新 操作员。

数学对象没有
[[Call]]
内部属性;无法将Math对象作为函数调用


javascript中的每个对象都有一个构造函数,
Math
是一个对象,因此它有一个构造函数,这并不意味着您可以创建它的新实例,它与

var数学={
是的,
马克斯:错
}

新数学();//epic fail,不是构造函数(函数)
引用我自己的话,答案是

因为说明书上是这么说的

数学对象

Math对象是具有某些命名属性的单个对象, 其中一些是函数

数学对象的
[[Prototype]]
内部属性的值为 标准内置对象原型对象(15.2.4)。价值 数学对象的
[[Class]]
内部属性是“Math”

数学对象没有
[[Construct]]
内部属性;它是 无法将Math对象用作具有新 操作员。

数学对象没有
[[Call]]
内部属性;无法将Math对象作为函数调用


javascript中的每个对象都有一个构造函数,
Math
是一个对象,因此它有一个构造函数,这并不意味着您可以创建它的新实例,它与

var数学={
是的,
马克斯:错
}

新数学();//epic fail,不是构造函数(函数)
每个对象都有一个构造函数,这并不意味着你可以创建对象文本等的新实例。这个问题的答案可能只是“因为规范这么说”。@AndreiZhamoida
Math
是一个对象。该对象必须已构造。每个对象都继承其构造函数的原型方法(在本例中为object)
Object.prototype.constructor=Object
函数是可调用的对象。数学不是一个函数。它的构造函数是全局对象,而不是函数。
数学类型。构造函数
函数
每个对象都有一个构造函数,并不意味着你可以创建对象文本等的新实例。这个问题的答案可能只是“因为规范这么说”。@AndreiZhamoida
数学
是一个对象。该对象必须已构造。每个对象都继承其构造函数的原型方法(在本例中为object)
Object.prototype.constructor=Object
函数是可调用的对象。数学不是一个函数。它的构造函数是全局对象,不是函数。
typeof Math.constructor
Function
Hmm,我想这肯定是我在寻找的东西。根据规范,我可以说这在浏览器引擎实现中隐藏了什么吗?对吗?@AndreiZhamoida-当然,对了?嗯,我想这肯定是我一直在寻找的东西。根据规范,我可以说这在浏览器引擎实现中隐藏了什么吗?“它会正确吗?”安德烈扎莫迪亚-当然,就是这样?