这是实现javascript字符串长度属性的正确方法吗

Is it the correct way to implement the javascript string length property?

本文关键字:方法 属性 实现 javascript 字符串      更新时间:2024-03-16

我想实现JavaScript字符串内置函数,但我对长度属性有点困惑

下面是我的实现

function MyString(str){
    this.str=str;
    //properties
    this.length=0;
        if(typeof this.str[0]=='undefined')
            this.length=0;          
        else
            for (var i = 0; typeof this.str[i]!='undefined' ; i++) 
             this.length++;
        //tostring method
    this.toString=function(){
        if(typeof this.str == 'string')
            console.log(this.str);
        else
            console.log("cannot be converted to String") ;  
    }
}

这是实现长度属性的正确方法吗。因为这对我来说太可怕了!!。或者,如果我只想在用户调用"str.length"时计算长度,并且长度仍然应该是一个属性,我该如何进行

我做的一个替代方案是这样的,但将是一个功能

this.length=function(this.str){
//length logic here
}

如何以更好的方式实现它,但长度似乎仍然是属性

我想你很困惑(我假设你正在尝试创建自己的字符串对象):

  1. 这是一种更好的定义财产的方式吗?

  2. 还有别的办法吗?和

  3. 我应该把计算长度的逻辑放在一个函数中,并仍然将其用作属性吗

如果你有一个像string.length这样的属性要自己构建,并且你想在初始化它之前对它进行一些操作,那么你做得很好。

一个属性将在构造函数中定义,并进行所有初始化,就像您所做的那样,除非您想将其作为length()的函数。

如果你想在函数中封装你的逻辑长度,它实际上会成为一个方法(不再是一个属性),我没有任何替代方法来覆盖

但如果你想要逻辑:这一个

        if(typeof this.str[0]=='undefined')
            this.length=0;          
        else
            for (var i = 0; typeof this.str[i]!='undefined' ; i++) 
             this.length++;

要在调用长度函数(您想要生成的属性)时被调用,则必须为其创建一个方法。

因此,在这种情况下,属性length是不可能的,除非你坚持你的方法

在JavaScript中,字符串的长度不是计算的。它是一个属于每个字符串值的常量。它可以使用.length属性进行查询,该属性访问各个字符串的内部存储大小。

只做

function MyString(str) {
    this.str = str;
    this.length = str.length;
}
MyString.prototype.toString = function() {
    return this.str;
};

如果你想更严格地遵循规范,请使用

    Object.defineProperty(this, "length", {value: str.length});