我正在尝试将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)方法一样? 谢谢, 基思
答案 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 ();
如果您找不到正确的解决方案,甚至不要尝试变通方法! ;)