javascript中的Object.create方法
Object.create method in javascript
作为javascript的初学者,我试图从这里理解Object.create()方法
https://developer-new.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create
在示例代码的第18行。在可写设置为true的情况下创建访问器属性。我还读到,可写仅用于数据描述符。
尝试运行,
var o = Object.create(Object.prototype, {
// foo is a regular "value property"
foo: {
writable:true, configurable:true, value: "hello"
},
// bar is a getter-and-setter (accessor) property
bar: {
writable: true,
configurable: false,
get: function() { return 10 },
set: function(value) { console.log("Setting `o.bar` to", value) }
}
});
console.log(o);
我得到invalid property error
。
问题是writable
和set
/get
互斥。代码在Chrome中生成了这个有用的错误:
Invalid property. A property cannot both have accessors and be writable...
这在逻辑上是有道理的:如果在属性上有set
/get
访问器,则该属性永远不会被写入和/或从中读取,因为任何读取/写入该属性的尝试都将被访问器函数截获。如果您将一个属性定义为writable
,并且赋予它访问器函数,则同时表示:
- "此属性的值可以直接更改,"以及
- 阻止所有读取和/或写入此属性的尝试;请使用这些函数
错误只是阻止您指定矛盾。我认为,从您编写getter和setter的事实来看,您并不真的希望该属性为writable
。只要去掉那一行,代码就能完美运行。
答案很晚,不是在寻找选票,但希望这会有所帮助。
有两种性质。每个属性都是其中之一:
-
具有以下四个属性的数据属性:
- 价值
- 可写的
- 可枚举的
- 可配置的
-
或具有以下四个属性的访问器属性:
- 得到
- 集合
- 可枚举的
- 可配置的
因此,不存在同时具有get
和writable
的属性。JavaScript就是这样!请参阅ECMAScript标准的第8.6节了解血腥的细节。
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- javascript中的Object.create方法
- 重写JavaScript中的Object.create方法
- 级联下拉列表mvc3,create方法
- NodeJS - 猫鼬,subdoc 对象没有方法 .id() 或 .create()
- 圣经般的"Sortable.create()"方法在进行AJAX调用以更新无序列表后不起作用
- ES6方法没有在create-react-app中定义
- 没有new关键字或.create方法的对象()
- 是否可以将javascript变量发送到控制器的create方法?
- AJAX错误400错误请求-需要将参数从一个方法传递到同一控制器的create方法
- JavaScript无法在object.create(baseObject)之后访问相同的对象方法
- Uncaught TypeError: Object [Object Object]没有方法'create
- 如何在rails控制器中为create方法呈现javavscript文件
- Laravel foreach的create方法将只添加一条记录
- 为什么Backbone's collection create()方法未填充id
- 当作为 Web 应用程序运行时,对象不支持 IE11 上的属性或方法“create”,在浏览器中直接打开 HTML 时很
- 使用Object.create(),范例应该将方法附加到它们的'prototype'财产
- Javascript在Object Literal方法中直接调用方法和使用Object.create方法的区别
- 理解Javascript构造函数:自定义create方法