function Keygrip(keys) {
if (arguments.length > 1) {
console.warn('as of v2, keygrip() only accepts a single argument.')
console.warn('set keygrip().hash= instead.')
console.warn('keygrip() also now only supports buffers.')
}
if (!Array.isArray(keys) || !keys.length) throw new Error("Keys must be provided.")
if (!(this instanceof Keygrip)) return new Keygrip(keys)
this.keys = keys
}
Keygrip.prototype = {
_hash: 'sha256',
}
Object.defineProperties(Keygrip.prototype, {
// modified Keygrip.prototype.constructor's enumerable = false
constructor: {
value: Keygrip,
writable: true,
configurable: true
},
hash: {
get: () => {
console.log(this); // {} 空对象
return this._hash; // undefined
},
set: (val) => {
if (!util.supportedHash(val)) throw new Error('unsupported hash algorithm: ' + val);
this._hash = val;
}
},
});
>>> const KeyGrip = require('keygrip');
>>> var s = KeyGrip(['fuck off my house', 'I never want to see you again']);
>>> console.log(s.hash)
{}
undefined
这是keygrip模块,我看到它原本的 constructor 只是定义了 value ,是可枚举的。手贱 fork 后修改了下,发现 get 和 set 中的 this 都是指向了一个空对象{},所以这样写的话,无论获取还是设置,都没有成功,想不明白到底是为什么。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.