需要在构造函数内部声明一个方法而不是将其声明为原型方法的情况示例
Example of situation that needs declaring a method inside the constructor function instead of declaring it as a prototype method
我知道原型方法由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"参数。此外,这里还讨论了闭包的一些常见用法。
- Javascript库对象方法声明
- Javascript:如何声明非全局静态方法
- 处理复杂类型时的声明方法
- 如何:在JavaScript对象中声明的Angular Factory方法
- 声明JavaScript选项对象的正确方法
- 正在使用AngularJS获取集合中的选定元素.声明性方法
- 声明Javascript名称空间的两种方法之间的区别
- jQuery命名空间声明和模块化方法
- 有没有一种方法可以使用函数参数的值来声明变量
- 用javascript在一个对象的两个键上声明两个数组的简洁方法是什么
- 我不明白在变量中声明方法或函数的概念
- Javascript中的变量声明方法
- 不可能在匿名对象中声明方法吗
- 像alert()这样的声明方法是否会覆盖Javascript中内置的alert()方法?
- 在JS中这三种声明方法的方式有什么区别吗?
- 在Javascript中动态声明方法
- 在声明方法时重复函数名
- 在类的外部声明方法
- 使用.protype声明方法的效果
- JavaScript:在对象外声明方法时意外的令牌