gpt4 book ai didi

javascript - 使用原型(prototype)更改 javascript 中的内置方法

转载 作者:行者123 更新时间:2023-11-29 18:22:18 25 4
gpt4 key购买 nike

我有三个问题,它们都是相关的。

1) 我想将名为 bar 的属性添加到 String 对象。我这样做了

String.prototype.bar=function() {console.log("jjjj");}
"mystring.bar//function()
"mystring".bar()//jjjj

但我想使用 "mystring".bar(无函数调用),就像我们如何使用 "mystring".length 来获取字符串的长度一样。我怎样才能做到这一点?

2) 现在我想更改 String 对象的内置长度方法。所以我这样做了

>>> String.prototype.length=function(){console.log("xxx");};
function()
>>> "mmmm".length
4

但长度方法没有改变。它仍然只返回字符串的长度。注意:我只是出于学习目的在控制台上更改此方法

3) 我很难从书中理解这个函数,javascript,Crockford 的好部分。(第 40 页)这是扩充 String 对象的方法。它替换字符串中的 HTML 实体并将它们替换为它们的等价物

String.method('deentityify',function() {
var entity = {
quot:'";,
lt:'<',
gt:'<'
};
//return the deentityify method
return function() {
return this.replace(/&([^&;]+);/g,
function (a,b) {
var r = entity[b];
return typeof r==='string' ? r : a;
}
);
};
}());
'&lt;&quot;&gt;'.dentityify();//<">

关于这个问题的疑问:1)既然没有使用prototpye,这个方法是否对所有要使用的String对象都可用。

2) 在上面的 return this.replace(.. 部分,我不明白给 a 和 b 的参数是什么。 即当我调用'<">'.dentityify();a 和 b 获取什么以及该匿名函数是如何执行的。

谢谢大家的帮助

最佳答案

I want to use "mystring".bar (no function call) just like how we use "mystring".length to get the length of string. how can I acheive this?

假设你想使用一个函数来动态计算一些值,但想使用普通属性访问的语法,而不是函数,你必须用 Object.defineProperty 创建一个 getter 属性:

Object.defineProperty(String.prototype, 'bar', {
get: function() {
return 'jjjjj';
}
});

but the length method has not changed. it still returns the length of string only.

那是因为.length is not a writeable property :

Once a String object is created, this property is unchanging. It has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.


I do not understand what parameters are given to a and b [...] and how that anonymous function is executed

回调由.replace内部执行对于正则表达式找到的每个匹配项。 MDN documentation 中解释了参数是什么.第一个参数是整个匹配项,后面的每个参数是表达式中一个捕获组的值。

关于javascript - 使用原型(prototype)更改 javascript 中的内置方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17243580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com