gpt4 book ai didi

javascript - 在构造函数中定义原型(prototype)方法

转载 作者:可可西里 更新时间:2023-11-01 02:57:36 24 4
gpt4 key购买 nike

今天,我看到了一个我一生中从未见过的 JavaScript 模式。我不知道使用这种模式的目的。这对我来说似乎是错误的,但我想保守一点。这可能是我以前从未见过的一些很棒的模式。

function Dog() {
Dog.prototype.bark = function () {
alert('woof!');
}

this.bark = function () {
Dog.prototype.bark();
}

this.bark();
}

首先,我不喜欢在构造函数中无缘无故地创建方法(作为特权成员)。每次创建实例时都会导致创建函数。其次,在这段代码中,它也调用了原型(prototype)名称“Dog”,而不是“this”。这让我非常困惑。

有人知道它有什么好处吗?

谢谢!恩典

最佳答案

这是一个非常糟糕的主意,原因有很多。其中一些是:

  1. 在构造函数中向原型(prototype)添加方法将导致在每次实例化新 Dog 时替换所有实例的原型(prototype)方法。
  2. 调用 Dog.prototype.bark() 意味着 this 将是 Dog.prototype 而不是你的 Dog,这可能会导致严重的问题。
  3. this.bark = function () { Dog.prototype.bark(); } 是一些严重的 WTF。因为 this.bark 已经对原型(prototype)方法求值了,所以这就没有必要了。像这样调用它实际上会破坏自然的 this 值,如 #2 中所述。

这是应该的:

function Dog() {
this.makeSound();
};

Dog.prototype.bark = function() {
alert('woof');
};

Dog.prototype.makeSound = function() {
this.bark();
};

或者,完全没有原型(prototype):

function Dog() {
this.bark = function() {
alert('woof');
};

this.makeSound = function() {
this.bark();
};

this.makeSound();
};

我根本不相信你的这段代码。

关于javascript - 在构造函数中定义原型(prototype)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7115594/

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