Dom*_*nik 5 javascript prototype key object
是否可以仅为{} -Objects定义原型?
在Javascript中,几乎所有东西都是一个对象.
Object.prototype.test = function() {
alert("test");
}
Run Code Online (Sandbox Code Playgroud)
所有对象(包括Number,String和Array)都将具有此方法.但我只想要这个结构对象.> {...} <
您可以先为对象创建所有原型,然后从Number,String和Array等其他对象中删除它.
// Overwrite
Array.prototype.test = undefined; // or delete property
Run Code Online (Sandbox Code Playgroud)
这"工作"......原型被覆盖.但关键仍然存在.
// Show all keys
for (key in arr)
{
alert(key); // print index of array AND keynames
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找最优雅的方式来做到这一点.
使用Array.prototype.test = undefined;您的方法值设置为undefinied,这不会删除它。
如果您确实想删除方法(属性),请使用delete Array.prototype.test;
ps 但在这种情况下(使用{}对象)-> 你无法得到你想要的东西delete。
Array.prototype继承自Object.prototype,删除后Array.prototype.test您的代码将找到Object.prototype.test并调用它。
我认为制作你想要的东西的最好方法是制作这样的东西:
Object.defineProperty(Object.prototype, 'test', {
enumerable: false,
configurable: false,
writable: true,
value: function(test) { alert('In test' + test); }
});
Object.defineProperty(Array.prototype, 'test', {
enumerable: false,
configurable: false,
writable: false,
value: function() { throw new Error('You can\'t do it!'); }
});
try {
var a = [];
var keys = "";
for (key in a) {
keys += key + ', '; // get all keys
}
// call array test method -> will throw exception
a.test('from array');
} catch (e) {
// check keys -> test is not here
console.log("Error: " + e.message + ' ' + "KEYS: " + keys);
}
var b = {};
// and this will work
b.test('from object');
Run Code Online (Sandbox Code Playgroud)