javascript - js中关于this的指向的疑问?
伊谢尔伦
伊谢尔伦 2017-04-11 12:52:42
[JavaScript讨论组]

今天开发需要一个简单的功能,就是把字符串的变量用值来替换。代码如下:

//替换变量为值
String.prototype.replaceVariables = function(){

var variables = this.getVariables();//获取变量数组
for (var i = 0; i < variables.length; i++) {
    var reg = new RegExp(variables[i],"g")
    this = this.replace(reg,i); //报错!!!this不能赋值
}

}

//返回变量数组
String.prototype.getVariables = function(){

var variableReg = new RegExp("[A-Z]+[0-9]+");
return  this.match(variableReg);

}

调用方法:
var _formula1 = 'IF(BG4=="",BG4,"")';//BG4是一个变量标识 需要替换
_formula1.replaceVariables();
错误提示:

这里this指向的应该是_formula1对象,replace替换后会返回新对象,再把新对象赋值给this,我觉得逻辑上应该没问题。
麻烦大家帮我看看我想的哪里出问题了。。。谢谢了。

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(5)
PHP中文网

this就是只读的,而且对于字符串来说,你想改变一个字符串实例那是不可能的,变通的办法就是生成一个新的字符串实例,从String.prototype.replace方法你就可以看出,别人就是返回的一个新的字符串,而不是修改现有的字符串,为什么是这样,那就需要从字符串在内存的存储说起,可以google下

高洛峰

this不能被赋值。在String.prototype上添加的方法,返回一个string不就行了吗?

ringa_lee

this又不是变量,怎么能赋值,你可以改一下

String.prototype.replaceVariables = function(){
    var variables = this.getVariables();//获取变量数组
    var result = this;
    for (var i = 0; i < variables.length; i++) {
        var reg = new RegExp(variables[i],"g")
        result = this.replace(reg,i); 
    }
    return result;
}
天蓬老师
String.prototype.getVariables = function(){
    var variableReg = new RegExp("[A-Z]+[0-9]+","g");
    return  this.match(variableReg);
}
String.prototype.replaceVariables =function(){
    var variables = this.getVariables();
    var str=this;
    for (var i = 0; i < variables.length; i++) {
        var reg = new RegExp(variables[i])
        str = str.replace(reg,i); 
    }
    console.log(str)
    return str
}
            
'IF(BG4=="",BG4,"")'.replaceVariables();

据我所知,this的字典里面没有赋值这一说法,业界一般都是称之为改变指向,使用callapply这两个更改this的指向,但是对于你这场景,一个简简单单的引用就好了

怪我咯

楼上都说得对,我再补充一点

this不是变量,它和 function, null 一样是关键字,它的值是执行时根据执行环境确定的,是不允许给关键字赋值的。

浏览器报异常时会给出异常原因,建议提问前先搜索一下这个错误消息,能从中得到很多信息。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号