Javascript 如何使用字符串向其添加方法';当原型是不可变的时,它是什么?
字符串是不可变的,这意味着我们只能读取它的属性,不能修改、创建或删除任何属性或方法。所以基本上字符串是冻结的 我的问题是如何向字符串原型添加新方法Javascript 如何使用字符串向其添加方法';当原型是不可变的时,它是什么?,javascript,string,immutability,Javascript,String,Immutability,字符串是不可变的,这意味着我们只能读取它的属性,不能修改、创建或删除任何属性或方法。所以基本上字符串是冻结的 我的问题是如何向字符串原型添加新方法 var a=''; String.prototype.hi=函数(){ console.log('hi'); } a、 您好()是的,可以像其他对象一样向字符串原型添加新函数 虽然这是值得一看的信息,目前在网上 只需从代码中删除调用 代码: var a = ''; String.prototype.hi = function(){ console.
var a='';
String.prototype.hi=函数(){
console.log('hi');
}
a、 您好()
是的,可以像其他对象一样向字符串原型添加新函数
虽然这是值得一看的信息,目前在网上
只需从代码中删除调用
代码:
var a = '';
String.prototype.hi = function(){
console.log('hi');
}
a.hi();
字符串是不可变的,这意味着我们只能读取它的属性,不能修改、创建或删除任何属性或方法
事实并非如此。字符串不可变意味着字符串对象本身被冻结。这并不意味着作为一个单独对象的
String.prototype
被冻结。当我们向String.prototype
对象添加属性时,这并不意味着我们对任何字符串进行了变异。它只是另一个对象,而不是字符串本身。string
在Javascript中是不可变的,它是一个true语句。所以,你是对的。
因此,字符串的值是不可变的,但不是prototype
。字符串从其父对象继承了原型。原型中可用的函数不修改string的值,而是返回string的新实例
说到继承,JavaScript只有一个结构:
物体。每个对象都有一个私有属性,该属性包含指向的链接
另一个物体叫做它的原型。这个原型对象有一个
它自己的原型,依此类推,直到到达一个带有null的对象
作为它的原型。根据定义,null没有原型,充当
这个原型链的最后一个环节
javascript中字符串的值与原型松散耦合。如果将字符串的原型替换为空对象,则值不会发生更改。当您访问字符串时,您将得到与字符串完全相同的值。关于prototype,您已经有足够的答案了它是什么…您甚至知道它 因此,在您的示例中,您没有对字符串本身进行变异,您注意到的是 例如:
var a='a';
String.prototype.test=函数(){
归还这个;
}
log('a基元类型=>',a的类型)
log('a primitive object wrapper type=>',typeof a.test())但是你为什么要这么做?为什么不能使用一个简单的函数并传递字符串作为参数,将函数
添加到原型
不是一个好的做法函数总是添加到原型中@CodeManiac@Liam这仍然不是一种好的做法(除非是针对多边形填充进行的)。请看,当您说String是不可变的时,它实际上意味着String类的实例是不可变的。但是您仍然可以将静态函数添加到String
class@CodeManiac是的,你是对的,但我举个例子来证明我的怀疑,以便更好地理解。是的,这是可能的,但为什么和如何?。因为String是不可变的,这与任何其他object不同。所有String方法都返回一个新字符串,而不是修改实际的字符串。我们不能简单地修改它的值,而是修改原型。而且,字符串不是javascript中唯一不变的东西。