【发布时间】:2014-10-06 14:32:58
【问题描述】:
更新
如果这不可能,请随时提供解释原因的答案。我很乐意将其标记为已接受。
我想稍微简化一下下面的代码(一个对象“声明”的两个步骤,我想要一个):
var Masher = function(opts) {
this._name = opts.name;
};
Masher.prototype = Object.create(Object.prototype, {
_name: { writable: true },
name: { get: function() { return this._name; }}
});
// Note: (new Masher({name: 'bar'})).name == 'bar'
我想一次性创建整个函数原型,构造函数出现在 Object.create 中的某处。或许,是这样的:
var Basher = Object.create(Function.prototype, {
_name: { writable: true },
name: { get: function() { return this._name; }},
constructor: { value: function(opts) { this._name = opts.name; }}
});
但是,当我调用 new Basher() 时,我得到:'TypeError: object is not a function'。
虽然我意识到我可以使用语法糖(一个辅助库)来做到这一点,但我的目标是让事情尽可能简单,并对 JS 对象、原型、构造函数内部结构有所了解。我已尝试尽可能多地阅读:SO related questions、Crockford、Ben Nadel、Joost Diepenmaat。
也许我没有找到正确的表述,或者我正在与 Object.create 的设计理念作斗争,或者语言不允许这样做。也许,这真的只是一种风格上的东西,因此是一种自负。
当然,我可以接受两步流程 (Masher)。一次将所有内容打包在一个镜头中感觉不错(巴舍尔)。
有没有办法做到这一点?谢谢。
【问题讨论】:
-
不,你不能。您需要创建两个单独的对象:构造函数和原型对象。
标签: javascript constructor new-operator object-create