JavaScript Getters and Setters issue
JavaScript Getters and Setters issue
这是我目前正在使用的代码:
Object.defineProperty(String.prototype, "testy", {
get: function() {
return this.string;
},
set: function(string) {
this.string = string;
}
});
console.log("tessfef3t".testy());
在我使用String.prototype.testy = function {}
之前,但是我被告知使用类似于上述代码的东西是更好的方法。我不确定它是如何工作的,但我还没有让该代码工作。
有人可以告诉我如何正确地做我正在做的事情吗?
谢谢
testy
是一种"假"属性——它本身没有价值,但设置或获取其值将调用其set
和get
函数。您可以像这样使用它:
var foo = new String();
// this invokes the setter and sets foo.string to 5:
foo.testy = 5;
// this invokes the getter and prints the value of foo.string
console.log(foo.testy);
// this prints 5, because foo.string has been set by the setter
console.log(foo.string);
编辑:
现在我看到你对你真正想要发生的事情的评论。无法更改字符串对象的值,因为字符串是不可变的。您必须销毁字符串对象并将其替换为新对象,这在对象自己的成员函数中是不可能的。
如果你在 getter 和 setter 中所做的只是设置一个在其他地方没有使用的属性,并且没有其他处理,那么你通过使用 getter 和 setter 一无所获,所以你最好使用原来的方法。此外,无论如何,您将无法检索在字符串上设置的属性。JavaScript 中的字符串值(这是字符串文字(如 "foo"
创建的内容,并且是唯一通常有用的字符串)不是对象,因此尝试访问属性需要特殊处理:实际上会创建一个临时String
对象,然后立即丢弃。
最后,getter 和 setter 的另一个主要缺点是它们是在 ECMAScript 5 中指定的,因此仅在相对较新的浏览器中可用。例如,它们未在 IE <9 中实现。
这对我来说很好用:
Object.defineProperty(String.prototype, "byteLength", {
get: function() {
var str = "" + this; // Get internal value
// Compute size in actual bytes vs Unicode characters
// per http://stackoverflow.com/a/23329386/912236
for (var b = str.length, c = str.length - 1; 0 <= c; c--) {
var a = str.charCodeAt(c);
127 < a && 2047 >= a ? b++ : 2047 < a && 65535 >= a && (b += 2);
56320 <= a && 57343 >= a && c--;
}
return b;
}
});
> "Hello".byteLength
< 5
相关文章:
- issue with FB.Event.subscribe
- 使用Jquery Issue垂直重新排序Divs
- 创建了一个选项卡,但点击时不会起作用-jQuery issue/newbie
- jQuery find() Issue
- $route.reload(); Issue
- PHP json_encode issue
- Three.js issue creating meshes outside of loader's load(
- Jquery :gt(value) issue
- Can't get setters/getters to work
- pickaday maxDate issue
- Stage.load(json) Issue..Kinetic.js
- Mootools Selector issue
- Java 8 Update 91 Issue
- JS parseInt() issue
- Jquery Colorbox issue with firefox
- Javascript firefox issue
- JavaScript Getters and Setters issue
- javascript and css firefox issue
- WordPress Blog - jQuery Issue
- Javascript getters and setters - recursion issue