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

时间:2013-07-06 17:48:41

标签: javascript string function

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

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

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

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

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

有谁知道为什么我不能创建一个length()函数,就像上面解释的startsWith(str)方法一样? 谢谢, 基思

2 个答案:

答案 0 :(得分: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}。

答案 1 :(得分:0)

很简单。 只需实现对象的原型即可。

if (existingElementCheck) {
            
            let bigContainer = document.querySelector(".bigContainer");
            // declaration
            let container = document.querySelector(".container")
            console.log(container)
            


            console.log(existingElementCheck)
            // ?new assignment?
            container = document.createElement("div")
            console.log(container)
            let newContainer = document.createElement("div")
            console.log(newContainer)
            newContainer.setAttribute("class", "newContainer")
            newContainer = newContainer.appendChild(weatherTextNode)
            newContainer = newContainer.appendChild(regionPictureNode)


            
            bigContainer.replaceChild(newContainer, container)



        }

如果您想要一些不错的实现,请继续:

// Defines the name what You want
String.prototype.size = function () {
   return this.length;
}

'abc'.size ();

如果您找不到正确的解决方案,甚至不要尝试变通方法! ;)