繁体   English   中英

为什么我无法在这种情况下修改“this”?

[英]Why am I unable to modify 'this' in this context?

在以下情况下,我假设this的值(它是一个字符串)可以修改为不同的字符串。 这样,我可以模拟一个数组并简单地编写string_var.shift()来删除字符串的第一个字符。 但是,从我收集到的信息来看,这是不可变的。 如果我无法修改字符串的值,我不确定我还能如何解决这个问题。 我当然可以返回结果,但是我必须编写string_var = string_var.shift() ,它与同名的数组 function 具有不同的语法,最终会令人困惑。

Object.defineProperty(String.prototype, "shift", { value: function() {
     this = this.substr(1)
}})

您不能修改this ,因为它是关键字,而不是变量。 就像functionclass

您可以将该值分配给另一个变量: var self = this.substr(1)代替

另外,请注意, this上下文是内部 function。

以下代码不起作用的原因有两个。 this不是变量,它是执行上下文(全局、function 或 eval)的属性,在非严格模式下,它始终是对 object 的引用,在严格模式下可以是任何值。 为它分配任何东西在语法上都是无效的。

但更重要的是,不可能在 String 接口上实现突变方法,因为根据 ECMAScript 规范,字符串、布尔值和数字在 Javscript 中都是不可变的。 当您“改变”一个值时,例如在上下文x += 5中,您在幕后创建一个新值,而不是修改原始值。

好吧,您可以在对其进行一些操作后返回该值

 String.prototype.shift = function() { return this.slice(1); }; var a = "abcdef"; console.log(a); a = a.shift(); console.log(a);

注意:修改语言本身的原型被认为是不好的做法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM