gpt4 book ai didi

Javascript OOP继承创建GLOBAL对象

转载 作者:行者123 更新时间:2023-12-03 11:25:10 25 4
gpt4 key购买 nike

看那个。

// @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 类的消息数组不是全局的?

最佳答案

问题出在您的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.mthis.messages 应该是同一件事,所以我会像它本来的样子一样对待它。

<小时/>

您的messages对象与异常原型(prototype)相关联。这意味着它在所有实例之间共享。现在这是一个非常简单的修复:只需将其放在启动中即可。

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 ?
}
}

关于Javascript OOP继承创建GLOBAL对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26947904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com