使用构造调用模式创建对象时,会有一个构造函数与其原型一起使用。到目前为止,每个目的都是明确的。
var Function_a = function(){
};
var a = new Function_a;
然而,当一个函数不是一个构造函数时,为什么javascript仍会生成它的原型?(根据我的调试确实)
在这种原型的情况下,如果函数不打算作为构造函数,c /将在javascript中使用?或者,编译器不知道更好的情况,只是创建一个原型对象,以防我们想要将该函数用作构造函数?
var function_b = function(){};
答案 0 :(得分:2)
首先,没有JavaScript编译器(除了Closure Compiler等,但它仍然不是传统意义上的编译器的JavaScript编译器)。只有JavaScript解释器。
第二,是的。 JavaScript总是为您创建的每个函数创建一个原型对象。这就是它的方式。幸运的是,由于JavaScript解释器使用了一些非常聪明的优化(我希望),这并不会使语言变慢。不管怎样,你真的不需要担心它。
无知是blss。
第三,漂亮的图表。我在我的previous answer画了一些图,但它们太可怕了。
当某个函数不是构造函数时,为什么javascript仍会生成其原型?
它为每个功能生成原型。
在这种原型的情况下,如果函数不打算作为构造函数,c /将在javascript中使用?
它只是一个普通的物体。我想它几乎可以用于任何事情。但是,如果人们想要创建一个对象,那么通常只使用对象文字,而不是乱用JavaScript创建的无用原型。
或者,编译器是不是更好地了解情况,并且只是在我们想要将该函数用作构造函数的情况下创建一个原型对象?
是