Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.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 - Fatal编程技术网

复制原型需要新对象吗?javascript

复制原型需要新对象吗?javascript,javascript,Javascript,因此,我正在查看“Elount Javascript”中的一些代码,其中指出,为了实现继承,您可以编写如下函数: function clone(object) { function OneShotConstructor() {} OneShotConstructor.prototype = object; return new OneShotConstructor(); } 如果已经定义了一个类Terrarium,那么就这样称呼它: function LifeLikeT

因此,我正在查看“Elount Javascript”中的一些代码,其中指出,为了实现继承,您可以编写如下函数:

function clone(object) {
    function OneShotConstructor() {}
    OneShotConstructor.prototype = object;
    return new OneShotConstructor();
}
如果已经定义了一个类
Terrarium
,那么就这样称呼它:

function LifeLikeTerrarium(plan) {
    Terrarium.call(this, plan);
}
LifeLikeTerrarium.prototype = clone(Terrarium.prototype);
LifeLikeTerrarium.prototype.constructor;
所以我的问题是为什么我们需要创建
OneShotConstructor
来复制它的原型。为什么我们不能写下这样的东西:

LifeLikeTerrarium.prototype = new Terrarium();
LifeLikeTerrarium.prototype = new Terrarium();

这是否会产生任何问题,是否是不正确的javascript?

请参阅Crockford的原型继承:

除了设置原型之外,还需要调用new关键字,该关键字将对象的内部[[prototype]]属性设置为构造函数的外部原型然后执行构造函数,只要提到这个,就使用新对象

这里有一个很好的解释:

在这里:


参见Crockford的原型遗传:

除了设置原型之外,还需要调用new关键字,该关键字将对象的内部[[prototype]]属性设置为构造函数的外部原型然后执行构造函数,只要提到这个,就使用新对象

这里有一个很好的解释:

在这里:

所以我的问题是为什么我们需要在 为了复制它的原型。为什么我们就不能写呢 比如:

LifeLikeTerrarium.prototype = new Terrarium();
LifeLikeTerrarium.prototype = new Terrarium();
这是否会产生任何问题,是否是不正确的javascript

因为调用新的Terrarium()除了克隆对象外,还会调用其构造函数,其后果未知。如果以迂回的方式执行,则可以在不调用构造函数的情况下克隆对象

所以我的问题是为什么我们需要在 为了复制它的原型。为什么我们就不能写呢 比如:

LifeLikeTerrarium.prototype = new Terrarium();
LifeLikeTerrarium.prototype = new Terrarium();
这是否会产生任何问题,是否是不正确的javascript


因为调用新的Terrarium()除了克隆对象外,还会调用其构造函数,其后果未知。如果您以迂回的方式进行操作,则可以克隆对象而不调用构造函数。

我还发现了类似的解释:在“和我的最后一个技巧”下。这里的方法称为create,原因似乎是我们不需要为构造函数指定参数,但是为什么克隆/创建让我们绕过了需要提供构造函数参数的问题呢?我在这里也发现了类似的解释:在“和我的最后一个技巧”下。这里的方法叫做create,原因似乎是我们不需要为构造函数指定参数,但是为什么克隆/创建可以帮助我们解决需要提供构造函数参数的问题呢?谢谢。这些链接帮助很大!我不知道是我的Java OOP深入到我的头脑中,还是原型编程的本质让我陷入了一个循环,但我花了一段时间才把所有的东西拼凑起来。谢谢。这些链接帮助很大!我不知道是我的Java OOP深入到我的头脑中,还是原型编程的本质让我陷入了一个循环,但我花了一段时间才把所有的东西拼凑起来。