当前位置: 代码迷 >> JavaScript >> 从原型函数创建具有副作用(就地)的函数
  详细解决方案

从原型函数创建具有副作用(就地)的函数

热度:80   发布时间:2023-06-07 18:21:05.0

我想在不使用返回值的情况下包装一些原型功能。

以下代码返回现代浏览器开发人员控制台中的排序列表:

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或者对于字符串, trimreplace来为阵列引起就地效果(如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);

我能想到的唯一方法是使用上下文,并使用括号表示法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" 

  相关解决方案