javascript - node.js 中对象的方法和属性之间的区别

标签 javascript node.js methods prototype ecmascript-5

我试图了解对象的属性如何与对象原型(prototype)上定义的方法相关联。以下代码打印“ECMA 样式 5”,而我希望它打印“ECMA 样式 3”。

var util = require('util');

function MyError() { }
util.inherits(MyError, Error);

Object.defineProperty(MyError.prototype, 'toJSON', {
  enumerable: false,
  value: function () {
    return 'ECMA5 style';
  }
});

MyError.prototype.toJSON = function() {
  return 'ECMA3 style';
}

var x = new MyError();
console.log(JSON.stringify(x));

我正在阅读一篇文章 1 ,但我无法理解为什么不打印样式 3,因为它在文件中被定义为第二个。这不应该覆盖现有的方法定义吗?

我正在运行 Node v0.10.21

最佳答案

这个和你是不是在Node环境下没有任何关系。如果未设置属性的特定属性,则它们默认为 false。数据属性有以下属性(括号内为属性为false时的说明):

  • 可配置(不能删除,也不能更改属性或属性类型)
  • 可枚举(不能在for-in循环中看到)
  • 可写(只读但仍可删除)
  • value(值本身)

因为您没有在对 Object.defineProperty 的调用中指定 writabletrue,所以它不能被写入,因此是只读 ( reference )。

默认情况下,“标准”属性将所有这些属性(value 除外)显式设置为 true(内部),这就是它正常工作的原因。 Mike Edwards 的好笔记是尝试做你在 ES5 严格模式下所做的事情会抛出一个 TypeError

关于javascript - node.js 中对象的方法和属性之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19966019/

相关文章:

java - 应用内结算 mPurchaseFinishedListener 错误

javascript - 控制台报错 : uncaught error history. js适配器已经加载

javascript - 如何使用javascript中的闭包访问函数内另一个范围内的变量?

javascript - 如何检查 Jquery UI 对话框中的复选框值

javascript - 如何在 Express.js 中将 JS 字符串作为 xml 文档发送给用户?

java - 尝试生成 2 个 vector ,其中包含 10 个 0-10 之间的随机数

javascript - 如何防止溢出 : auto from being scrolled when the user hits the space bar? 的 <div>

node.js - Typescript Node.js 最简单的设置不起作用——错误 TS2307 : Cannot find module 'fs'

node.js - 使用数组查询 cassandra 数据库

java - 如何对一个整数的3位数字求和?