在构造函数中分配原型方法:潜在的陷阱
从风格上来说,有些人更喜欢使用以下结构来定义原型方法:
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; } };
但是,与替代结构相比,这种方法有几个缺点:
var Filter = function( category, value ){ this.category = category; this.value = value; };// var Filter = function(){...} Filter.prototype.checkProduct = function( product ){ // run some checks return is_match; }
功能缺点:
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
在这种情况下,get() 返回 c2 的局部变量值而不是 c1 的值,因为方法闭包引用原型上最近定义的值。
其他注意事项:
结论:
虽然第一个结构在风格上可能令人愉悦,但它可能会带来功能缺陷和范围问题。通常建议在构造函数之外分配原型方法(如第二个结构中),以避免潜在的问题。
以上是为什么原型方法应该在构造函数之外定义?的详细内容。更多信息请关注PHP中文网其他相关文章!