问题标签 [defineproperty]

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 投票
6 回答
28411 浏览

javascript - JS 定义属性和原型

如您所知,我们可以在 JS 中使用defineProperty(). 尝试使用defineProperty().

这是一个示例代码:

我有一个必须添加到对象的字段数组

我也有一堂课会被修改

以及一个将字段添加到类的函数defineProperty()

运行后,define_fields()我在实例中有我的字段User

但是这些属性的值是相同的

defineProperty()在这种情况下有什么办法可以正常工作吗?如果我理解问题是value哪个类的每个实例都相同,但我不知道如何解决它。提前感谢您的回答。

UPD: 这种方式抛出“RangeError:超出最大调用堆栈大小”

0 投票
3 回答
1193 浏览

angularjs - Breeze 和 Angular 'ToDo' 应用程序不适用于 IE 8

我已经从http://www.breezejs.com/documentation/download下载了示例“Breeze 0.83.5”应用程序

Angular 'ToDo' 示例不适用于 IE8。

我在 Breeze 脚本参考上方包含了以下脚本参考。

知道为什么这不起作用吗?

0 投票
1 回答
410 浏览

javascript - JavaScript:将值分配给不可枚举的属性会将其更改为可枚举?

我想我在这里误解了一些东西。我有一个对象,其中包含我希望不可枚举的属性。我希望能够从对象的函数本身中为其分配值,但是当我这样做时,该属性变得可枚举。

例子:

实际发生的是,为 node.parent 分配一个值会创建一个名为 parent 的新“自己的”属性,它会覆盖原始属性。

有没有一种方法可以在不这样做的情况下在内部为不可枚举的属性赋值?还是我必须求助于在闭包中引用变量的 getter/setter 属性?

编辑:

GGG的回答值得称赞,因为正是他的建议让我得到了最终的答案。

我想要做的基本上是从“for(key in object)”语句中隐藏一个简单的属性。我能够这样做:

我一开始对此犹豫不决的一个原因是错误地理解我不希望每个实例都重新创建该属性。但是,呃,这就是实例属性!!!!

谢谢,GGG,帮助我重新调整我的大脑!

0 投票
1 回答
65 浏览

javascript - 为什么 Object.defineProperty 定义的属性在使用前被访问会改变?

仅在 Chrome 中对此进行了测试,我的应用程序不需要在任何其他浏览器中运行。

例如在以下代码 ( JSFiddle ) 中:

输出是:

代替:

而在以下代码(JSFiddle)中:

输出是:

这里发生了什么?

0 投票
0 回答
512 浏览

javascript - 使用 Object.defineProperty 在原型中创建特定于实例的属性?

我正在尝试在原型中创建一个属性,以便它在所有实例中都可用(不能将它放在构造函数中,并且宁愿不通过 instance.propertyname = *; 创建它,如果可能的话。举个例子下面的代码:

产生输出:

我如何让它改为产生:

0 投票
1 回答
136 浏览

javascript - 如果我也可以更简单地执行 Object.defineProperty,那么它有什么用?

Object.defineProperty 有什么用...

...如果我也可以...

jsfiddle在这里

0 投票
1 回答
1110 浏览

javascript - 扩展设置器默认对象

就像你们都知道一个按钮就是一个按钮......点击,向上,向下,做这个,做那个。所以我写了一些默认的按钮行为“类/对象”。

外部默认按钮.js:

在 html 中包含 button.js 并扩展按钮“类/对象”:

这几乎可以工作,但它会杀死初始化的原始 Button。

如何扩展原始设置器?

0 投票
1 回答
997 浏览

javascript - Javascript Object.defineProperty 在 FireFox 19.02 (MacOS) 中产生 TypeError

就在今天,我尝试将我的一个使用Object.defineProperty()javascript 中的方法的旧库包含到 HTML 文档中。我很确定在以前版本的 FireFox 中它工作得很好。但是,如果我现在在 MaxOS 10.6.8 上的 FF 19.02 中使用它,如下例所示:

我收到以下错误

我后来才添加了value,get和部分,以便将它们显式设置为(默认情况下它们应该是,但由于这种行为一开始就相当奇怪,我想确保我已经涵盖了所有基础)。它在 Safari 5.1.7 中运行没有问题,正如我之前已经提到的,我非常确定它在以前的 FF 版本中也是如此。奇怪的是,即使是现在,如果我只是将代码行复制到 FF 的控制台中,也不会抛出任何错误,并且一切正常。如果我定义,或.没有任何区别。有什么明显我忽略的东西,还是我在这里遇到了浏览器不兼容的新问题?setundefinedvaluegetset

0 投票
1 回答
443 浏览

javascript - 使用 Html5 getter 和 setter 实现具有显示模块模式的属性所需的说明

我已经搜索了很多关于如何在 Javascript 中执行属性的方法。我见过的大多数揭示模块模式都只暴露了函数,根据经验,我知道如果我暴露了一个对象,我只是真的在那里得到了一个值的副本,因此我可以有一个函数getMyThing() 和 setMyThing 并公开它。但是我想暴露真实的属性

我已经看到了我正在避免使用的老式defineGetter和较新的 Object.defineProperty( 我遇到了一些真正的麻烦。(我可以很容易地将它用于一个人工对象,但不能在我的“模块”中使用它,也不是在我的我想揭示的模块。

无论如何,我在一些地方看到您可以使用 get 和 set 关键字,并且我有以下示例至少在 Firefox 和 ie10 中对我有用。

我的问题:这是一种可以接受的方法,还是有我不知道的隐藏陷阱。这是现代浏览器最能接受的方法吗?这个功能叫什么?Object.defineProperty 功能的正式名称是什么?我假设 get 和 set 关键字的使用是 ECMAScript5 的 getter 和 setter,但是另一个叫什么?

在“属性初始化程序中的Getter”和“属性初始化程序中的Setter”类别下,此兼容性图表http://kangax.github.io/es5-compat-table/中提到的get和set关键字是什么?

JSfiddle 上的示例 - http://jsfiddle.net/klumsy/NagbE/1/

0 投票
2 回答
514 浏览

javascript - 如何找到属性的设置/获取功能(Object.defineProperty)

假设一个属性定义如下:

我想做的是重新定义window.prop,例如:

window.prop.set/get 不起作用,但是这样的事情可能吗?