问题标签 [object-create]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
370 浏览

javascript - 如何使用 Crockfords 的 Object.create() (Javascript) 访问我祖先的重写方法

0 投票
1 回答
1720 浏览

javascript - 原型继承:你能链接 Object.create 吗?

我是原型继承的新手,所以我试图理解“正确”的方式。我以为我可以这样做:

但相反,我得到“ tbase.BicData.prototype is undefined

在 Java 中,我想要的是将Tdata作为样板“接口”,将BicData作为该接口的实现,然后从中实例化对象。

我哪里错了?

0 投票
15 回答
199659 浏览

javascript - 使用“Object.create”而不是“new”

Javascript 1.9.3 / ECMAScript 5 引入Object.create了 Douglas Crockford 等人长期以来一直在提倡的。如何new在下面的代码中替换为Object.create

(假设MY_GLOBAL.nextId存在)。

我能想到的最好的是:

似乎没有任何优势,所以我想我没有得到它。我可能太新古典主义了。我应该如何使用Object.create来创建用户'bob'?

0 投票
7 回答
16820 浏览

javascript - 使用 Object.create() 进行 JavaScript 继承?

如何使用 Object.create() 继承?我尝试了这些,但没有一个有效:

没有任何效果。我应该如何使用这个新的 Object.create() 函数?

0 投票
3 回答
2982 浏览

javascript - JavaScript Object.create——继承嵌套属性

我遇到了 Douglas Crockfords Object.create 方法的一个特点,我希望有人能解释一下:

如果我创建一个对象——比如“person”——使用对象文字表示法,然后使用 Object.create 创建一个新对象——比如“anotherPerson”——它继承了初始“person”对象的方法和属性。

如果我然后更改第二个对象的名称值 - 'anotherPerson' - 它也会更改初始'person' 对象的名称值。

这仅在属性嵌套时发生,这段代码应该让您了解我的意思:

如果我要在不嵌套的情况下存储名称值,那么这种奇怪的行为就不会发生——例如

当使用带有构造函数和“new”关键字的经典继承风格时,似乎不会出现这种嵌套问题。

如果有人能够解释为什么会发生这种情况,我将不胜感激!?

0 投票
2 回答
302 浏览

javascript - Object.create 和内置对象

我正在尝试将功能(新方法)添加到内置对象(在我的例子中,类型为 CanvasRenderingContext2D)。

第一种方法是将方法添加到原型中,它可以工作,但我不想修改内置对象。

我正在考虑使用 Object.create(来自 ES5)来扩展对象,例如Object.create(context, <my_method_descriptors>),但是在访问扩展对象的属性/调用方法时,它在某些浏览器上失败。例如,这个片段

var canvas = document.getElementById("mainCanvas");
var context = canvas.getContext('2d');
var exContext = Object.create(context);
try {
exContext.fillStyle = 'red';
exContext.fillRect(0, 0, 120, 120);
} catch (e) {
alert(e);
}

在 IE9 Beta 和 Safari 5 上会失败,但在 Firefox 4 Beta 和 Chrome 7 上会成功。

另一个例子:Object.create(new Date()).getDate()在所有浏览器中都失败。

有什么想法吗?

0 投票
11 回答
147000 浏览

javascript - 了解 Object.create() 和 new SomeFunction() 之间的区别

我最近偶然发现了Object.create()JavaScript 中的方法,并试图推断它与使用 创建对象的新实例有何不同new SomeFunction(),以及何时需要使用其中的一个。

考虑以下示例:

请注意,在两种情况下都观察到相同的行为。在我看来,这两种情况之间的主要区别是:

  • 中使用的对象Object.create()实际上形成了新对象的原型,而在new Function()声明的属性/函数中并不形成原型。
  • 您不能Object.create()像使用函数式语法那样使用语法创建闭包。考虑到 JavaScript 的词法(vs 块)类型范围,这是合乎逻辑的。

上述说法是否正确?我错过了什么吗?您什么时候会使用其中一种?

编辑:链接到上述代码示例的 jsfiddle 版本:http: //jsfiddle.net/rZfYL/

0 投票
5 回答
9398 浏览

javascript - 如何使用 ES5 Object.create 和对象文字语法模拟构造函数?

假设我有一个这样的对象:

问题:我想用正确的 src 初始化那个精灵。但是,当我使用以下创建技术时:

我没有要设置的构造函数方法(又名 init 函数)sprite.src = 'cool.png';

我的问题:

如果我使用对象字面量技术,并且Object.create(),我什么时候真正初始化我的一些内部状态(如 的示例new Image()

我的解决方案:

但是,我不知道这是否是一个很好的模式。如果有办法,我想用“JavaScript 方式”来做到这一点。:)

谢谢!

0 投票
3 回答
3543 浏览

javascript - Javascript Object.create 在 Firefox 中不起作用

我总是在 Firefox (3.6.14) 中遇到以下异常:

这很令人困惑,因为我很确定它是一个函数,并且代码在 Chrome 上按预期工作。

负责此行为的代码行如下:

如果有人想查看所有代码,它来自扑克库 gaga.js:https ://github.com/SlexAxton/gaga.js

也许有人知道如何让它在 Firefox 中运行?

0 投票
1 回答
424 浏览

javascript - 模块中的 Object.create 和私有函数

这是 ES5 的 Object.create 的独立实现:

及其使用示例:

我注意到animal在尝试调用私有函数时,内部变得有点混乱,例如:

有没有更简洁的方法来遵循这种模式?特别是,消除对privFunc.call(this, arg).

另一种同样丑陋的方式是: