需要在构造函数内部声明一个方法而不是将其声明为原型方法的情况示例

Example of situation that needs declaring a method inside the constructor function instead of declaring it as a prototype method

本文关键字:声明 方法 原型 情况 内部 构造函数 一个      更新时间:2023-09-26

我知道原型方法由JavaScript中对象的所有实例共享。

当你需要其他情况时,我想不出一个实际的例子——在构造函数中声明方法,从而使对象的每个实例都有自己的方法实例。你能提供一个案例吗?

主要用途是模拟私有字段。请参阅我的答案,例如:

声明构造函数中的javascript对象方法与原型中的方法

我在一定程度上同意@Raynos的观点——以效率为代价实施私人国家确实是一种不必要和徒劳的做法。

通常,当需要任何类型的状态绑定时,都有必要创建函数。因此,当您需要传递明确引用对象状态的函数时,它可能具有实际价值。如果每次创建状态绑定函数时都会受到惩罚,那么如果在构造函数中只绑定一次并引用该单绑定函数,而不是多次创建它,则是有利的。

国家约束有时是必要的设计选择自己的手中。例如,在初始化时为对象创建状态绑定的事件处理程序是有意义的。

但我想不出一个实际的例子,当你需要其他情况

这是因为没有实际的例子。

在构造函数中声明函数是一种已知的不良做法,因为这会导致不必要的性能损失。

还应该注意的是,原型非常棒,因为它们鼓励可扩展性、灵活性和猴子补丁。这意味着你可以修复别人的物体,因为一切都可以被拦截和操纵。

闭包就像冻结的对象,它们剥夺了你的灵活性,是操纵、包装或更改的噩梦。

需要注意的是,你不需要使用原型,如果喜欢的话,可以使用功能

function cake(fruits, chocolate, size) {
    return {
        slice: function () {
            return cakeSliceList(this)
        },
        toString: function () {
            return "A lovely cake containing " + fruits.toString()
                + ", " + chocolate.toString()
        },
        weight: function () {
            return size * CAKE_SIZE + fruits.weight() + chocolate.weight()
        }
    }
}

功能性风格是有效的,将功能性风格与原型结合在一起会变得相当愚蠢,而且速度相当快。

如果您在对象中的任何位置使用闭包,并且需要在函数中引用它们。或者,如果你特别想让你的功能"私有"。

当然,这就引出了一个问题,即在什么情况下要使用闭变量。此处可能再次弹出"private"参数。此外,这里还讨论了闭包的一些常见用法。