问题标签 [ecmascript-5]

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 投票
1 回答
361 浏览

javascript - 如何在 Safari 中使 DOM 处理程序可枚举?

我需要枚举我之前修改过的 DOM 元素的所有属性。我可以用 Firefox、Chrome 和 Opera 做到这一点,但我不能用 Safari(我暂时不关心 IE)。

*:虽然该属性在 Opera 中是不可枚举的,但无论如何它是可枚举的!!!

我可以通过在分配之前删除属性在 Chrome中进行第三个alert输出:trueonclick

但该属性尚未在 Safari 中枚举。

我什至尝试使用 EcmaScript 5 Object 方法defineProperty

但它返回错误:

TypeError:DOM 对象不支持 defineProperty

有什么建议么?

PS 为什么 Safari 的行为与 Chrome 不同,尽管它们都是基于 Webkit 的?

0 投票
2 回答
2557 浏览

javascript - JavaScript:向密封对象添加属性应该引发类型错误异常?

假设我在 JavaScript 中有这样的东西:

那么,正确的行为是什么?它不在严格模式下,所以我假设 obj.address 行将被忽略。但是,情况并非如此,因为它会抛出 Chrome。我正在查看 V8 的测试,它似乎应该只在严格模式下抛出:

object.seal 测试代码: http ://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/object-seal.js?spec=svn7379&r=7379

这是该文件中的一些代码:

顺便说一句,有来自严格模式的测试,我的例子会清楚地抛出:http ://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/strict-mode.js?spec =svn7250&r=7250

有任何想法吗?

0 投票
1 回答
1826 浏览

javascript - 支持 ECMAScript 5 的测试套件

有谁知道是否存在测试 ECMAScript 5 支持的测试套件(例如用 QUnit 编写)?

0 投票
1 回答
1072 浏览

javascript - ES5 是否有 __lookupGetter__ 的对应物?

我知道Object.defineProperty这很有趣,是非标准 API 的绝佳替代品__defineGetter____defineSetter__但是否有类似的对应物__lookupGetter__?或者以某种方式实现类似的事情?

0 投票
3 回答
89 浏览

javascript - 如何确保浏览器可以支持**{get X() {}}**

我拒绝使用__defineProperty__,而是更喜欢替代语法{get X() {}}

但是,这不适用于 IE。

除了浏览器检测之外,我可以检测到浏览器是否支持新语法的最佳方法是什么?

编辑:好的,实际上我并没有特别尝试检测 IE,而是将那些“不支持get X(){}语法的浏览器”重定向到notsupported.html。我相信有一些方法可以做到这一点并且正在努力,但如果有人之前已经遇到过这个问题并且有解决方案..

编辑 2:顺便说一句,这是否意味着没有人(除了我之外的人)使用get X(){}语法,因为它不受所有人支持(或尚不被 5 个主要浏览器支持)?

0 投票
1 回答
739 浏览

actionscript-3 - 如何从 AS3 代码调用 Tamarin ESC 编译器?

我正在尝试从 AS3 代码中调用 Tamarin 的 ESC 编译器。我已经在 Flash Player 中加载了 ESC 编译器字节码,但是当我调用它时,无论我提供什么源代码,ESC 编译器总是返回相同的无操作字节码。人类可读的 ESC 代码如下所示:

我使用以下 AS3 代码调用它:

但无论我提供什么源代码,它总是返回两个函数的字节码,一个调用另一个,两个函数都不做任何事情。

这是它返回的字节码(元数据被剥离,转换为人类可读):

提前致谢!我知道这是一个核心问题,但我希望一些核心编码人员可以对此有所了解!

0 投票
2 回答
1948 浏览

javascript - Object.constructor===Object.constructor.constructor // 为什么?

此处说明https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function函数对象实例的构造函数属性“指定创建对象原型的函数”。这令人困惑,所以Object.constructor是“创建对象原型的函数”?究竟什么对象是“对象”?

我试图理解为什么 Object.constructor 的构造函数属性本身是?

像这样: Object.constructor===Object.constructor.constructor // 为什么?

编辑:我觉得 TJ Crowder 的回答很好,但他的话的措辞很模糊(至少对我来说,初读时很难理解)。这是改写后的答案:

1) ObjectFunction的一个实例

2) Object没有一个叫做constructor的属性,所以当我们调用Object.constructor时,它实际上给了我们Object.[[prototype]].constructor(又名Object.__ proto __.constructor)。

3) Object.constructor(又名Object.__ proto __.constructor)是Function的一个实例。

4)由于ObjectObject.constructor(又名Object.__ proto __.constructor)都是Function的实例,因此它们都有一个__ proto __属性,它引用同一个对象。换句话说Object.__ proto __ === Object.constructor.__ proto __(又名Object.__ proto __.constructor._ proto _

5) 行Object.constructor===Object.constructor.constructor实际上等于行Object.__ proto __.constructor===Object.constructor.__ proto __.constructor

6)结合步骤4和5给我们Object.constructor===Object.constructor.constructor

7) 转到步骤 4)

0 投票
4 回答
584 浏览

javascript - 为什么 **(Object.__proto__ instanceof Function)** === false?

为什么Object._ proto _ instanceof Function给我错误?

0 投票
3 回答
5050 浏览

javascript - 为什么我们需要 isPrototypeOf 呢?

该页面指出:

注意: isPrototypeOf 与 instanceof 运算符不同。在表达式 object instanceof AFunction 中,对象原型链是针对 AFunction.prototype 进行检查的,而不是针对 AFunction 本身

好吧,我真的不明白他们想告诉我们什么。是不是object instanceof AFunction和 `AFunction.prototype.isPrototypeOf(object) 完全一样?还是我错了?

为什么我们需要isPrototypeOf呢?

如果我需要做p.isPrototypeOf(o),我就不能做o instanceof p.constructor吗?

另外,在p.isPrototypeOf(o)功能上等同于p===Object.getPrototypeOf(o)?

0 投票
1 回答
177 浏览

javascript - javascript:关于构造函数 **new** 关键字的问题

从页面https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Details_of_the_Object_Model

当 JavaScript 看到 new 运算符时,它会创建一个新的通用对象并将这个新对象作为 this 关键字的值传递给 WorkerBee 构造函数。构造函数显式设置项目属性的值,并隐式设置内部 proto属性的值为 WorkerBee.prototype 的值。(该属性名称在前面有两个下划线字符,在末尾有两个下划线字符。) proto属性确定用于返回属性值的原型链。一旦设置了这些属性,JavaScript 就会返回新对象,并且赋值语句将变量标记设置为该对象。

所以基本上如果我们有这个功能:

我想知道做类似var bee1 = new Bee("qwe", "asd"); 与: