Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.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 我可以在不调用构造函数的情况下实例化JSAPI对象吗?_Javascript - Fatal编程技术网

Javascript 我可以在不调用构造函数的情况下实例化JSAPI对象吗?

Javascript 我可以在不调用构造函数的情况下实例化JSAPI对象吗?,javascript,Javascript,传统观点似乎认为使用JavaScript作为经典语言是不好的:所有专家(如@eric elliott、Douglas Crockford等)都认为,JavaScript的支柱是面向对象的(原型继承)和功能性的,而不是经典的 然而,我们的许多API都使用构造函数,并且在实例化对象时需要使用new。例如,如果我想通过AJAX调用获取数据,我必须执行类似于let xhr=new XMLHttpRequest()的操作 那么,在API更新之前/除非API更新之前,我们现在是否还停留在JavaScript

传统观点似乎认为使用JavaScript作为经典语言是不好的:所有专家(如@eric elliott、Douglas Crockford等)都认为,JavaScript的支柱是面向对象的(原型继承)和功能性的,而不是经典的

然而,我们的许多API都使用构造函数,并且在实例化对象时需要使用
new
。例如,如果我想通过AJAX调用获取数据,我必须执行类似于
let xhr=new XMLHttpRequest()
的操作


那么,在API更新之前/除非API更新之前,我们现在是否还停留在JavaScript的经典行为上?或者是否有某种方法可以从我们的代码中删除所有这些
新的
声明,可能是类似于API工厂函数或
Object.create(XMLHttpRequest.prototype)

对象。create
做了完全不同的事情——它被用来创建类的子类。您可以查看更详细的内容,而且ecmascript中似乎没有这样的功能。也许在实现的浏览器中应该有一些黑客,谁知道
new
与原型与经典有什么关系呢?我想请@EricElliot帮我回答这个问题,因为他更有经验,但我会尝试一下@FelixKling,
new
操作符调用构造函数来创建类的实例:这正是经典继承的定义,除非我遗漏了一个要点。原型继承是无类的@AndrewLi,JS不是一种基于类的语言,
new
是JS的“坏部分”之一。@DerekHenderson
new
创建一个从原型派生的实例,并通过调用其上的
构造函数来初始化它,这正是原型继承的定义。我们称构造函数和原型的组合为“类”并不重要,它的作用与基于类的语言不同。不,Crockford的观点被许多其他专家忽略了。@DerekHenderson:FWIW,这里是
new
的简化(和近似)实现:
函数my_new(F,…args){var obj=Object.create(F.prototype);F.apply(obj,args);return obj;}
。当然,您可以自己调用
对象。创建(…)
+函数进行初始化,但是为什么呢?:)我还想指出,语言的语法和实际行为并不一定相关。例如,拥有
语法并不意味着该语言使用“经典”类概念。我认为我们可以同意,创建一个新的“实例”/对象可能需要两部分:继承(
object.create(…)
)和初始化。您可以通过
Object.assign({x:0,y:0},Object.create(point))
轻松实现这一点。但是如果你有100分,你就得写100遍。此时,您可能会使用(工厂)函数使其可重用。在某种程度上,构造函数也是这样的:一种使初始化逻辑可重用的方法。Idk,也许在原型与经典的争论中我遗漏了一些东西,但总的来说,这对我来说似乎毫无意义。