Javascript OOP 继承了 create GLOBAL 对象
Javascript OOP inherits create GLOBAL object
看。
// @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中调用一个新的异常。
function Validations(){
this.errors = new Exception
}
而且,我创建了这个模型,模型有验证,验证有错误,很好。
ActiveSupport.extend(Model.prototype, Validations.prototype)
function Model(){};
但。。。当我创建一个新实例作为模型并向该实例添加错误时,类异常显示为全局对象。看。。。
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
类上:
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
对象与异常原型相关联。这意味着它会在所有实例之间共享。现在这是一个非常简单的修复:只需将其放入启动中即可。
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 ?
}
}
相关文章:
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何使用json将对象列表从java转换为javascript
- 序列化数据属性中对象的最可靠方法
- 如何访问声音管理器2创建的声音对象
- global.getElementById('..')为null或不是对象
- Javascript OOP 继承了 create GLOBAL 对象
- Javascript对象:变量global不能在不同的函数中读取
- 在Node.js中存储100多个对象"global"变量
- 全局变量没有附加到MeteorJS包上的“Global”对象