gpt4 book ai didi

javascript - 使用模块中的 defineProperty

转载 作者:行者123 更新时间:2023-11-30 06:45:13 28 4
gpt4 key购买 nike

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

    Object.defineProperty(Array.prototype, 
'sayHello', {get: function(){ return "hello I'm an array" });

现在我想让导入模块的任何脚本都可以看到此更改。这可能吗?

我尝试相应地修改 EXPORTED_SYMBOLS,但到目前为止我没有得到任何结果。

是否有另一种方法可以达到同样的效果? (即加载模块,将不可枚举的属性添加到选定的对象 - 如上面示例中的数组)

编辑:

根据 Alnitak 下面关于 value:get: 的评论 ...

我现在可以定义和使用这样的属性:

Object.defineProperty(Array.prototype, 'firstId' , {value: function(){return this[0].id}});
var a = [{id:'x'},{id:'y'}]
a.firstId()

按预期返回

x

现在:是否可以将 defineProperty 调用放在模块中,从脚本加载模块并期望此脚本的数组将充当上面的数组?

编辑2:

我正在用 xulrunner 编写一个应用程序,我正在使用 Components.utils.import() 加载模块 - 我认为(可能是错误的)这个问题可以更笼统地提出......

最佳答案

属性描述符中的 get: 类型可用于提供在运行时计算的只读值:

Object.defineProperty(Array.prototype, 'sayHello', {
get: function() {
return "hello I'm an array";
}
});

使用 value: 如果属性只是一个只读常量值:

Object.defineProperty(Array.prototype, 'sayHello', {
value: "hello I'm an array"
});

两者的用法是:

var hello = myArray.sayHello;

您还应该使用 value: 类型来添加一个函数 作为原型(prototype)的不可枚举属性,例如:

Object.defineProperty(Array.prototype, 'sayHello', {
value: function(o) {
return "hello I'm an array";
}
});

用法:

var hello = myArray.sayHello();

同样,

关于javascript - 使用模块中的 defineProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7554509/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com