JavaScript字符串子类化问题
JavaScript String subclassing issue
我在一个简单的浏览器泥客户端工作,我需要提供一些基本功能的字符串处理。因此,当某些用户施放集体法术时,它应该被折叠成一个一个字符串,即CAST: User1 -> [target1, target2]
。我写的代码是:
function CastGroup(caster, cast, targets, text) {
this.cast = cast || '';
this.targets = targets || [];
this.caster = caster || '';
this.text = text || '';
}
CastGroup.prototype = new String;
CastGroup.prototype.render = function(){
var targets = this.targets ? '[' + this.targets.join(', ') + ']' : '';
var text = '<b>CAST</b>: ' + this.caster + ' ' + this.cast + ' -> ' + targets + ''n';
this.text = text;
return new CastGroup(this.caster, this.cast, this.targets, this.text);
};
CastGroup.prototype.valueOf = function(){
return this.text;
};
CastGroup.prototype.toString = function(){
return this.render();
};
var c = new CastGroup('name', 'supercast', ['1', '2']);
console.log(typeof c); // object
var s = c.replace('name', 'nomnom');
console.log(typeof s); // string
任意字符串函数,如String.replace()
替换原对象。我怎样才能避免呢?
bundle
是一个数组,包含原始文本、纯文本和彩色文本。用户在用户空间中定义回调函数,它应该完成所有的高亮显示工作。
function process_highlights(bundle){
if (!bundle || !bundle.length){
return bundle;
}
var highlight_result = bundle;
for (var i=0; i<HIGHLIGHTS.length; i++){
highlight_result = HIGHLIGHTS[i](highlight_result);
}
return highlight_result;
}
因此,文本处理链如下: original_bundle
->subst_processor
→trigger_processor
→highlight_processor
→ output_window
。所有这些处理器都接受并返回一个包,其中应该包含字符串。我现在不能更改设计
CastGroup.prototype = new String;
CastGroup.prototype = String.prototype;
String
方法而不返回新的String
对象。要了解更多关于这一点(以及一般的高级Javascript),请查看这些幻灯片。更新:
我想我现在更明白你的问题了。replace
string方法返回一个新字符串,这就是为什么它会覆盖你的对象。
您根本不需要从String
对象继承。String
方法甚至不能在对象上工作(所以删除CastGroup.prototype = new String
)。你要做的就是直接修改对象的值。
如果你需要修改CastGroup
的'text'值,那么声明另一个方法:
CastGroup.prototype.modifyText = function (findValue, replaceValue) {
var text = this.text;
this.text = text.replace(findValue, replaceValue);
return this;
};
这对我很有效。
CastGroup.prototype.replace = function() {
this.text = this.text.replace.apply(this.text, arguments);
return this;
};
覆盖对象中的原型,更新需要更新的字段,然后返回对象
相关文章:
- 是否可以从父类访问子类的属性
- 子类访问父类's闭包变量
- Javascript关键字搜索子类Div值
- 如何通过Prototype或jquery移除子类的父类基类
- JavaScript数组的子类化破坏了快速枚举
- 可以“;超级“;可以在子类的方法内部使用,在不直接引用的情况下调用相应的超类方法
- 具有子类的构造函数中的Object.freeze
- JavaScript—父类和子类/对象的此问题
- Google Maps Javascript v3 自定义控件子类化标准控件
- 调用子类函数时调用的超类函数
- 在 Javascript 中更改 CSS 子类的值
- 子类化 Meteor.users() 以获得不同的用户类型
- 下划线扩展方法和结构.js子类
- 如何在 javascript 中从子类调用父方法
- 如何在单击父类的另一个子类时获取子类的值
- 寻址jquery ui手风琴子类
- hover添加类-或子类:悬停以影响父类
- 创建新的子类对象时设置父类中定义的变量时出现问题
- node.js中的继承问题:试图覆盖子类的原型时出现赋值错误
- 带有Coffee子类问题的EventEmitter