看那个。
// @alias ActiveRecord.extend
...
extend: function extend(destination, source){
for (var property in source){
destination[property] = source[property];
}
return destination;
}
...
我有这堂课:
function Exception(){}
Exception.prototype = {
messages: {},
add: function(k, v){
if(!Array.isArray(this.messages[k])) this.messages[k] = new Array
this.messages[k].push(v)
}
}
而且,我有这门课。并且它调用方法this.errors一个新的Exception。
function Validations(){
this.errors = new Exception
}
而且,我创建了这个模型,模型有验证,验证有错误,很好。
ActiveSupport.extend(Model.prototype, Validations.prototype)
function Model(){};
但是... 当我创建一个新实例模型并向该实例添加错误时,Class Exception 作为全球对象出现。 LOOK ...
a = new Model
a.errors.add('a', 1);
console.log(a.errors.messages) // return {a: [1]}
b = new Model
b.errors.add('a', 2);
console.log(b.errors.messages) // return {a: [1,2]}
我该如何解决这个问题?
如何使类Exception的消息数组不是GLOBAL?
答案 0 :(得分:1)
问题在于你的Exception
课程:
function Exception(){}
Exception.prototype = {
messages: {},
add: function(k, v){
if(!Array.isArray(this.m[k])) this.m[k] = new Array
this.m[k].push(v)
// did you mean this.messages ?
}
}
我认为this.m
和this.messages
应该是同一个东西,所以我会把它视为它是怎么回事。
您的messages
对象与Exception原型相关联。这意味着它在所有实例中共享。它现在是一个非常简单的解决方案:只需将其置于启动状态。
function Exception(){
this.messages = {};
}
Exception.prototype = {
add: function(k, v){
if(!Array.isArray(this.m[k])) this.m[k] = new Array
this.m[k].push(v)
// did you mean this.messages ?
}
}