ali*_*ice 3 javascript prototype
Date.prototype = { foo : 1 };
Date.prototype.foo // => null
Run Code Online (Sandbox Code Playgroud)
奇怪的是,替换内置函数的原型只是被忽略而没有发出任何错误,但我找不到任何提及它的文章,书籍或博客文章.
不,这不违法(因为规范并不妨碍你这样做).它通常用于您自己定义的功能.
它在JavaScript规范定义的函数上被忽略,因为它们的prototype属性是只读的.从规范Date.prototype:
Date.prototype的初始值是内部对象%DatePrototype%(20.3.4).
此属性具有属性{ [[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}.
(我的重点.)
只有在松散模式下才会默默地忽略分配给它; 在严格模式下(我们基本上都应该一直使用它),这是一个错误:
"use strict";
Date.prototype = {};Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以通过以下方式定义您自己的只读属性,其行为方式相同Object.defineProperty:
var obj = {};
Object.defineProperty(obj, "answer", {
value: 42,
writable: false // This is for emphasis, it's actually the default
});
tryLoose();
tryStrict();
function tryLoose() {
console.log("Trying to assign new value in loose mode.");
obj.answer = "It's complicated.";
console.log("After assignment, obj.answer = " + obj.answer);
}
function tryStrict() {
"use strict";
console.log("Trying to assign new value in strict mode.");
obj.answer = "It's complicated.";
console.log("We won't get here.");
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |