这是实现javascript字符串长度属性的正确方法吗
Is it the correct way to implement the javascript string length property?
我想实现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
}
如何以更好的方式实现它,但长度似乎仍然是属性
我想你很困惑(我假设你正在尝试创建自己的字符串对象):
这是一种更好的定义财产的方式吗?
还有别的办法吗?和
我应该把计算长度的逻辑放在一个函数中,并仍然将其用作属性吗
如果你有一个像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});
相关文章:
- 序列化数据属性中对象的最可靠方法
- 如何从对象的原型方法访问JavaScript对象属性
- 设置嵌套对象属性的更好方法
- JQuery示例不起作用-“;对象没有't支持属性或方法'按钮'&”;
- 对象不支持属性或方法“自动完成”
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 区分具有相同名称的属性和方法
- sails.js beforeCreate方法只接收required设置为true的模型属性
- SCRIPT438:对象没有't支持属性或方法'endsWith'在IE10中
- 有什么方法可以将类型指定为 self?或解决方法“属性类型不兼容”
- 打字稿 - 为什么猫鼬中不存在“方法”属性
- 从JavaScript中的另一个方法属性中引用对象方法属性
- Javascript:通过在数组上循环来创建对象方法/属性
- 冲突/方法/属性Javascript错误
- 将' this '的继承扩展到' object '的方法/属性
- Javascript继承静态和实例方法/属性
- 我可以为对象设置正则表达式吗's方法/属性选择器
- 发现HTML对象标记方法/属性
- 为什么我的主干模型奇怪地嵌套在集合中,需要钻取才能访问方法/属性?