我想通过the answer生成GUID字符串。
'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
现在,我想将其放入toString
函数中,例如:GUID.NewGuid().toString()
。
我已经尝试过(不工作):
let GUID = function () {};
GUID.NewGuid = function () {};
GUID.NewGuid.prototype.toString = function () {
let guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
let r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
return guid;
};
未捕获的TypeError:无法读取属性' toString'的 未定义
console.log(GUID.NewGuid().toString());
我想要实现的目标:使用语法GUID.NewGuid().toString()
生成ID。
如何解决?
答案 0 :(得分:5)
你需要一个instance的课程。
var guid = new GUID.NewGuid;
let GUID = function () {};
GUID.NewGuid = function () {};
GUID.NewGuid.prototype.toString = function () {
let guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
let r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
return guid;
};
var guid = new GUID.NewGuid;
console.log(guid.toString());

答案 1 :(得分:3)
让@Nina的代码按照我期望的方式行事,并且你希望在toString期间进行后期评估。一个想法是在评估后改变对象的toString,基本上在对象上创建一个后期绑定函数,而不是原型。
我经常使用这种技术来创建后期绑定方法,某些方法可能很昂贵,并且在构建期间执行初始化可能非常耗时。在这种情况下,我不确定是否会有很大的性能提升,但这是一个很好的例子。
let GUID = function () {};
GUID.NewGuid = function () {};
GUID.NewGuid.prototype.toString = function () {
let guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
let r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
this.toString = function() { return guid; }; //add this..
return guid;
};
var guid = new GUID.NewGuid;
console.log(guid.toString()); //these two
console.log(guid.toString()); //want to equal the same
guid = new GUID.NewGuid;
console.log(guid.toString()); //now I want a new one.