问题描述
我想在不使用返回值的情况下包装一些原型功能。
以下代码返回现代浏览器开发人员控制台中的排序列表:
Array.prototype.sor = function() {
Array.prototype.sort.apply(this);
};
var t = [2,3,1]
t.sor()
t
以下变化如下:
sor = function(l) {
Array.prototype.sort.apply(l);
};
var t = [2,3,1]
sor(t)
t
是否也可以使用返回其结果的非原位原型函数(如join或者对于字符串, trim或replace来为阵列引起就地效果(如sor )?
例如,像这样:
String.prototype.tri = function() {
String.prototype.trim.apply(this);
};
var t = " 123"
t.tri()
t
理想情况下,在浏览器控制台中返回"123" ( t的新值)。
它没有,因为String.prototype.trim返回一个永远不会被拾取的值。
但是,当然,我不能简单地设置this来修剪字符串:
this = String.prototype.trim.apply(this);
1楼
我能想到的唯一方法是使用上下文,并使用括号表示法context['nameOfVar']引用您的变量。
这可以做到,因为JS变量只是一个Object属性(Object是作用域)。
如果变量总是在全局范围内声明,你可以做window['myVar'] ,但为了确保它适用于任何范围,最好使用this['myVar'] 。
我不确定它是否危险 ,我只是发现它很丑陋 。 如果有人知道,请告诉我们! :)
var joinMe = function(separator, prop) { this[prop] = this[prop].join(separator); }; t = [2,3,1]; joinMe(',', 't'); document.body.innerHTML = t; // "2,3,1"