【问题标题】:Get the identifier [duplicate]获取标识符 [重复]
【发布时间】:2014-07-12 17:16:46
【问题描述】:

一开始我必须说我是新手,很抱歉提出这么愚蠢的问题 其次,.extract 只是一个例子。

这里是代码

String.prototype.extract=function(start,end){
     var value=this;
     var rval="";
     for(var i=start; i<=end; i++){
          rval+=value.charAt(i)
     }
     ????? = rval;
}

var str="abcdef";
str.extract(1,4)
alert(str) //must be bcde

现在我想要方法 extract (str) 的调用者,并且 rval 的值必须只保存到那个。

我可以这样做: str = str.extract; 并在函数return rval

但我希望我们像 something.toUpperCase 而不是 something=something.toUpperCase 那样做

?????必须由方法提取(str)的调用者替换

任何帮助都会很有用

【问题讨论】:

  • 字符串(更一般地说:原始类型的所有值)是不可变的。没有办法绕过它(除非你实现自己的 JavaScript 引擎我猜)。
  • ^ 他所说的,toUpperCase 并没有“就地”更改字符串,它返回一个新字符串,就像任何其他字符串方法一样。

标签: javascript


【解决方案1】:

处理此问题的最佳方法是使用回调。

重新使用你的代码,它看起来像:

String.prototype.extract=function(start,end, callback){
     var value=this;
     var rval="";
     for(var i=start; i<=end; i++){
          rval+=value.charAt(i)
     }
     callback(rval);
}

var str="abcdef";
str.extract(1,4, function(s1) {
    alert(s1) //must be bcde
});

另一种处理方法是简单地返回值并将其重新分配给原始变量。

String.prototype.extract=function(start,end, callback){
     var value=this;
     var rval="";
     for(var i=start; i<=end; i++){
          rval+=value.charAt(i)
     }
     return rval;
}

var str="abcdef";
str = str.extract(1,4);
alert(str) //must be bcde

【讨论】:

  • 为什么你会为同步方法使用回调?
  • 为什么要在这里使用回调?这是同步代码,我不希望这里有回调。查看其他 String 方法。
  • 我会使用回调,因为我觉得这与他所追求的控制流最匹配。是的,他可以在那里使用定期退货,我会更新我的答案。
猜你喜欢
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 2013-03-16
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2012-07-20
相关资源
最近更新 更多