在本文中,我们将给您介绍关于在javascript中覆盖对象的toString的详细内容,并且为您解答js覆盖方法的相关问题,此外,我们还将为您提供关于javascript–在单个模块中覆盖node.
在本文中,我们将给您介绍关于在javascript中覆盖对象的toString的详细内容,并且为您解答js覆盖方法的相关问题,此外,我们还将为您提供关于javascript – 在单个模块中覆盖node.js querystring.escape、javascript – 自定义toString的推荐方法是什么?使用Symbol.toStringTag或覆盖toString?、Javascript 中使用 String 对象的方法、JavaScript中json对象和string对象之间相互转化_javascript技巧的知识。
本文目录一览:- 在javascript中覆盖对象的toString(js覆盖方法)
- javascript – 在单个模块中覆盖node.js querystring.escape
- javascript – 自定义toString的推荐方法是什么?使用Symbol.toStringTag或覆盖toString?
- Javascript 中使用 String 对象的方法
- JavaScript中json对象和string对象之间相互转化_javascript技巧
在javascript中覆盖对象的toString(js覆盖方法)
function greet(){ console.log("Hello!"); } console.log(greet); greet.toString = function () { return "Overridden toString"; }; console.log(greet);
产生
function greet(){ window.runnerWindow.proxyConsole.log("Hello!"); } Overridden toString
但是,当我尝试使用对象时,它似乎没有生效. http://jsbin.com/jebunakibi/1/edit?js,console
var ray = { 'name': 'Ray','fav_food': 'Carrots' }; console.log(ray); ray.toString = function () { return "My name is " + this.name + " and I loooove " + this.fav_food; }; console.log(ray);
产生
[object Object] { fav_food: "Carrots",name: "Ray" } [object Object] { fav_food: "Carrots",name: "Ray",toString: function () { return "My name is " + this.name + " and I loooove " + this.fav_food; } }
我预计第二个console.log会打印出来
My name is Ray and I loooove Carrots
我甚至尝试在Object.prototype中更改toString方法,但它仍然没有产生任何影响.有人可以解释这段代码有什么问题吗?
解决方法
如果你做了警告(光线),你会看到“我的名字是雷,我喜欢胡萝卜”.
要在控制台中看到相同的内容,请执行以下操作:
console.log(ray.toString());
… 或这个:
console.log(ray + '');
您可以为此目的创建一个新的控制台功能:
console.say= function(s) { console.log(s + ''); }
例:
console.say= function(s) { console.log(s + ''); } var ray = { 'name': 'Ray','fav_food': 'Carrots' }; ray.toString = function () { return "My name is " + this.name + " and I loooove " + this.fav_food; }; console.say(ray); //My name is Ray and I loooove Carrots
javascript – 在单个模块中覆盖node.js querystring.escape
querystring.escape = function(str) { str = encodeURIComponent(str) .replace(/\*/g,'%2A') .replace(/\(/g,'%28') .replace(/\)/g,'%29') .replace(/'/g,'%27'); return str; };
我唯一担心的是,如果我理解正确,这可能会改变其他模块的行为,这些模块将来可能还需要查询字符串(具有正常的转义函数). node.js文档说,模块只加载一次,原始实例返回到后续的require调用.有没有办法让我强制这个特殊的查询字符串实例是唯一的?
显然我可以编写一个在传统调用querystring.stringify之后进行替换的包装器,但我很好奇,因为标准节点模块确实有一个“全局”设置对我来说似乎很奇怪,除非实际上有某种方式毕竟需要一个独特的实例.
解决方法
Is there a way for me to force this particular instance of querystring to be unique?
并不是的.节点的module caching是每进程和based on the module’s filepath.
更改不会进入/从Child Processes或Clusters进行更改.因此,您可以通过其中一个使用自己的查询字符串来隔离脚本.
但是,在同一个过程中,Node没有提供绕过此功能的官方方法来检索单个模块的唯一实例.
this might change the behavior of other modules that might also require querystring (with its normal escape function) in the future.
好吧,如果URL编码的值有其他字符编码,则它仍然有效.只是通常他们不需要.
而且,我想,有可能影响对编码值寄予期望的模块.但是,这通常是一个奇怪的选择(例外情况是你自己的querystring.escape的单元测试).因此,只要它可以正确解码,它应该没问题.
querystring.escape = function (str) { /* ... */ }; // your function here var sample = "a(b*c)'d"; var encoded = querystring.escape(sample); console.log(encoded); // a%28b%2ac%29'd var decoded = querystring.unescape(encoded); console.log(decoded); // a(b*c)'d console.log(decoded === sample); // true
而且,覆盖querystring.escape
和querystring.unescape
的能力是设计的:
The escape function used by
querystring.stringify
,provided so that it Could be overridden if necessary.
javascript – 自定义toString的推荐方法是什么?使用Symbol.toStringTag或覆盖toString?
那么推荐的方式是什么?
解决方法
如果您尝试定义对象的字符串版本,请提供toString方法.
如果您尝试向类添加Object.prototype.toString将用于构建其“[object XYZ]”字符串的信息,请提供一个名称为Symbol.toStringTag值的方法.
以下是差异的说明:
class Example { constructor(x) { this.x = x; } toString() { return `Example[x=${this.x}]`; } get [Symbol.toStringTag]() { return "Example"; } } const e = new Example(42); console.log(e.toString()); // Example[x=42] console.log(String(e)); // Example[x=42] console.log(Object.prototype.toString.call(e)); // [object Example]
如果我们没有提供get [Symbol.toStringTag],那最后一行将输出“[object Object]”而不是“[object Example]”.
请注意,它不必是getter,而是可以是数据属性.由于您使用的是Babel,如果您包含Public Class Fields支持(目前为第2阶段),则可以将其定义为:
class Example { constructor(x) { this.x = x; } toString() { return `Example[x=${this.x}]`; } [Symbol.toStringTag] = "Example"; }
……虽然它当然是可写的.交替:
class Example { constructor(x) { this.x = x; } toString() { return `Example[x=${this.x}]`; } } Object.defineProperty(Example.prototype,Symbol.toStringTag,{ value: "Example" });
Javascript 中使用 String 对象的方法
String 对象有许多的方法,因此我们这里的讨论范围只限于其中的两个,indexOf() 和 substring() 方法。
原文链接: http://blog.csdn.net/newhappy2008/article/details/2032601
JavaScript中json对象和string对象之间相互转化_javascript技巧
json对象var json = {aa:true,bb:true};
var json1 = {aa:''b'',bb:{cc:true,dd:true}};
1:js操作json对象
for(var item in json){
alert(item); //结果是 aa,bb, 类型是 string
alert(typeof(item));
alert(eval("json."+item)); //结果是true,true类型是boolean
eval(("json."+item+"=false;")); //改变json对象的值
}