gpt4 book ai didi

javascript - 调用 Javascript 工厂方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:27:44 26 4
gpt4 key购买 nike

我正在学习面向对象的 Java 脚本。我有以下工厂方法代码。

function Foo() {
var value = 1;
return {
method: function() {
return value;
},
value:value
}
}
Foo.prototype = {
bar: function() {}
};

new Foo();
Foo();

可以通过两种方式调用方法 Foo。 new Foo();Foo(); 两者执行相同的操作并且输出相同。 Java 脚本处理的实际区别是什么?

最佳答案

在正常情况下,new 应该在从构造函数创建对象时使用,而在执行任何其他函数调用时应避免使用。在函数上使用 new 时 1) 创建一个新对象; 2) 使用绑定(bind)到该新对象的 this 的值调用该函数,以及 3) 从该函数返回的值(默认情况下)是在第一步中创建的对象。

但是,在您的情况下,您从“构造函数”返回一个全新的对象(不同于上面 1 中的对象),这意味着没有实际区别。 this 的值在函数内部仍然是不同的,但它们都将返回 false:

new Foo() instanceof Foo;
Foo() instanceof Foo;

为了说明这个的区别,将以下内容添加到Foo:

alert(this instanceof Foo)

当使用 new 调用时,它会发出 true 警报;在没有它的情况下调用时,false

此外,将对象分配给 Foo.prototype 没有意义,因为您永远不会创建任何将使用它的 Foo 实例(因为,再次,你将返回与 Foo 完全不同的东西。

如果您要从 Foo 返回自定义对象,那么您应该更喜欢没有 new 的版本;如果您要忽略它并返回完全不同的东西,那么创建 Foo 的新实例毫无意义。

关于javascript - 调用 Javascript 工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8707559/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com