网站搜索

继承 - 在 Javascript 中,'Object.create' 和 'new' 的区别

我想我已经在脑海中理清了区别,但我只是想确认一下。

在道格拉斯·克罗克福德的页面《JavaScript中的原型继承》中,他说

在原型系统中,对象从对象继承。然而,JavaScript 缺少执行该操作的运算符。相反,它有一个 new 运算符,使得 new f() 产生一个继承自 f.prototype 的新对象。

我并不真正理解他在那句话中想表达的意思,所以我做了一些测试。在我看来,关键的区别是,如果我在一个纯原型系统中基于另一个对象创建一个对象,那么所有父级的成员应该在新对象的原型上,而不是在新对象本身

阅读更多 →

javascript - 构造函数总是一个函数对象吗?

我正在阅读最新的 ECMA-262 参考文献,第 5.1 版,2011 年 6 月。

在8.6.2节表9中,我们关于[[Construct]]内部属性有以下内容:

创建一个对象。通过 new 操作符调用。SpecOp 的参数是传递给 new 操作符的参数。实现此内部方法的对象称为构造函数。

标准并没有说明构造函数必须是一个函数对象。那么我们可以有一个不是函数对象的构造函数对象吗?

按要求提供标准的链接

答案#1

虽然“构造函数”一词已经被定义(正如 @RobG 所指出的),

阅读更多 →

javascript - 通过html图像元素对象显示图像

我有以下代码:

function createImage(source) { var pastedImage = new Image(); pastedImage.onload = function() { } pastedImage.src = source; }

函数 createImage 包含 source 参数,该参数包含图像的来源。之后,我创建了 Image 类的对象 pastedImage

阅读更多 →

javascript - 如何在 PHP 中接收 JSON 对象?

我正在尝试将一个 JSON 对象从 AJAX 请求发送到我的服务器。

我正在用 JQuery 这样做:

$.ajax({ type: "POST", url: settings.ajax.post, dataType: 'json', data: basket.aggregate(Basket.EXPORT_JSON, qty), success: function(data, textStatus, jqXHR) { if (typeof settings.ajax.success == "function") settings.ajax.success(data, textStatus, jqXHR); }, error: function(jqXHR, text, e) { if (typeof settings.ajax.error == "function") settings.ajax.error(jqXHR, text, e); }

阅读更多 →

javascript - Three.js 自动旋转相机以聚焦对象

在 three.js 3D 空间中,我有一些 MESH 对象,它们的位置是已知的,还有一个相机对象。

我想要实现的是:当我点击一个按钮时,摄像机会自动旋转和缩放(改变位置),以便用户的视角会聚焦在选定的对象上。选定对象的位置是已知的。

请给我一些关于如何做的建议好吗?

答案#1

尝试 camera.lookAt( object.position );

你不需要使用四元数。

如果你愿意,你可以把相机移近一点。

阅读更多 →

向 JavaScript 对象添加监听器函数

我有以下代码,它定义了一个Car。每个Car都有一个颜色,以及一个setColor(color)函数。我想添加监听器函数,每当setColor(color)被调用时,这些函数就会被调用,并且我希望能够在任何时候添加这些监听器函数。这种方法合适吗?有没有更简洁的方式?

function Car() { this._color = 'red'; this._callbacks = {}; this.setColor = function(color) { t

阅读更多 →

javascript - 在这段代码中,Object.create(Class.prototype) 做了什么?

我正在阅读有关 JavaScript 中的混入模式的内容,我遇到了一段我不理解的代码:

SuperHero.prototype = Object.create( Person.prototype );

原始代码中实际上有一个拼写错误(大写的 H)。如果我将它改为小写,它就可以工作。然而,如果我实际上删除这一行,一切似乎也照常工作。

这是完整的代码:

var Person = function( firstName , lastName ){ this.firstName = firstName;

阅读更多 →

javascript - 为什么 console.log() 不显示来自 Object.create 的继承属性?

我在尝试对一个基础对象使用 Object.defineProperty() 时遇到了问题。我想从该对象继承属性,使用 Object.create(),然后在派生对象中定义更多属性(这些属性可能会从基础对象继承)。我应该说明,我的目标环境是 node.js。

这是一个例子:

var Base = {}; Object.defineProperty(Base, 'prop1', { enumerable:true, get:function(){ return 'prop1 value';} }); Object.defineProperty(Base, 'prop2', { enumerable:true, value : 'prop 2 value' }); Object.defineProperty(Base, 'create', { value:function(){ return Object.create(Base);

阅读更多 →

javascript - 无法从 jQuery 对象获取 innerHTML

我正在使用谷歌地图 API。我写了下面的代码。

<div id="map"></div>

我使用谷歌浏览器控制台查看 $ ("div#map") 的内容。

console.log($("div#map"));

结果是:

[ <div id=​"map" style=​"width:​ 1218.222222328186px;​ position:​ relative;​ background-color:​ rgb(229,

阅读更多 →

c# - JavaScript Object.create 和 IE8

我正在为 SharePoint 2013 进行软件开发。这其中的一部分涉及重写 SharePoint 的文件预览器(filepreview.debug.js 变成 myfilepreview.debug.js)。然而,我们在 IE8 中遇到了问题。在 IE9 中一切都运行正常。

在 IE8 中抛出的错误会在您访问我们自定义功能已启用的站点集合中的任何网站时导致错误:“对象不支持此属性或方法”

在对这个错误进行了一些研究之后,似乎 IE8 根本不支持 Object.create。这篇 Mozilla 开发者文章似乎支持这个理论。当通过在抛出错误的那一行之前添加这个 polyfill 代码来解决问题时,我更倾向于相信这一点:

if (typeof Object.create !== 'function') { Object.create = function (o) { function F() { } F.prototype = o; return

阅读更多 →