如何定义一个javascript string.length()函数?

kei*_*phw 1 javascript string function

我试图将java代码转换为javascript(js),我对js如何缺少许多字符串方法感到非常沮丧.我知道js字符串库,你可以做someString.length来获得字符串的长度.但是我对这个主题的最佳答案感到惊喜: 如何检查字符串"StartsWith"是否是另一个字符串? startsWith方法可以在我自己的js代码文件中定义,如下所示:

if (typeof String.prototype.startsWith != 'function') {
  String.prototype.startsWith = function (str){
    return this.indexOf(str) == 0;
  };
}
Run Code Online (Sandbox Code Playgroud)

所以我试着为长度方法做类似的事情:

if (typeof String.prototype.length != 'function') {
  String.prototype.length = function (){
    return this.length;
  };
}
var str = "a string";
alert(str.length());
Run Code Online (Sandbox Code Playgroud)

但它不起作用,当我尝试调用时,我在chrome中得到以下错误:未捕获的TypeError:对象的属性"长度"不是函数

有谁知道为什么我不能创建一个length()函数类似于如何为上面解释的startsWith(str)方法做?谢谢,基思

198*_*983 9

使用不可变length属性创建字符串实例,该属性不从String.prototype继承.所以你将无法创建一个length()为字符串方法.

http://ecma-international.org/ecma-262/5.1/#sec-15.5.5

字符串实例从String原型对象继承属性,它们的[[Class]]内部属性值为"String".字符串实例还具有[[PrimitiveValue]]内部属性,长度属性和一组具有数组索引名称的可枚举属性.

请参阅http://ecma-international.org/ecma-262/5.1/#sec-15.5.5.1

创建String对象后,此属性将保持不变.它具有{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}.

  • @keithphw方法也是属性.如果您正在考虑的话,他们没有单独的命名空间.函数是JavaScript中的对象,并且像任何其他值一样存储为属性. (2认同)