在构造函数内分配原型方法:潜在的缺点和范围问题
在优先考虑风格偏好的同时,解决潜在的缺点和范围问题至关重要与在构造函数内分配原型方法相关。考虑以下代码结构:
结构 1:
<code class="javascript">var Filter = function(category, value) { this.category = category; this.value = value; // product is a JSON object Filter.prototype.checkProduct = function(product) { // run some checks return is_match; } };</code>
结构 2:
<code class="javascript">var Filter = function(category, value) { this.category = category; this.value = value; }; Filter.prototype.checkProduct = function(product) { // run some checks return is_match; }</code>
缺点和范围问题:
1。重复原型分配和函数创建:
在结构 1 中,每次创建实例时都会一遍又一遍地重新分配原型。这不仅会重复赋值,还会为每个实例创建一个新的函数对象。
2.意外的范围问题:
结构 1 可能会导致意外的范围问题。如果原型方法引用构造函数的局部变量,则第一个结构可能会导致意外行为。考虑以下示例:
<code class="javascript">var Counter = function(initialValue) { var value = initialValue; // product is a JSON object Counter.prototype.get = function() { return value++; } }; var c1 = new Counter(0); var c2 = new Counter(10); console.log(c1.get()); // outputs 10, should output 0</code>
在这种情况下,为每个实例创建的 get 方法共享相同的原型对象。因此,值变量会递增并在实例之间共享,从而导致错误的输出。
其他注意事项:
结论:
虽然个人偏好可能有所不同,但重要的是要意识到潜在的可能性与在构造函数内分配原型方法相关的缺点和范围问题。为了可靠性和可维护性,一般推荐第二种代码结构。
以上是为什么在 JavaScript 中,在构造函数内分配原型方法通常被认为是一种不好的做法?的详细内容。更多信息请关注PHP中文网其他相关文章!