我想在不使用返回值的情况下包装一些原型功能。
以下代码返回现代浏览器开发人员控制台中的排序列表:
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
是否也可以使用返回其结果的非原位原型函数(如sor
或者对于字符串,为数组导致数组的原位效果(如join
所有)) trim
或replace
?
例如,像这样:
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);
答案 0 :(得分:2)
我能想到的唯一方法是使用上下文,并使用括号表示法context['nameOfVar']
来引用您的变量。
这可以做到,因为JS变量只是一个Object属性(Object是范围)。
如果变量总是在全局范围内声明,则可以window['myVar']
,但为了确保它适用于任何范围,最好使用this['myVar']
。
我不确定它是否危险,我只是发现 hacky 。如果有人知道,请告诉我们! :)
var joinMe = function(separator, prop) {
this[prop] = this[prop].join(separator);
};
t = [2,3,1];
joinMe(',', 't');
document.body.innerHTML = t; // "2,3,1"