Javascript 使用模块中的defineProperty
假设在我的模块中,我有如下内容:Javascript 使用模块中的defineProperty,javascript,ecmascript-5,Javascript,Ecmascript 5,假设在我的模块中,我有如下内容: Object.defineProperty(Array.prototype, 'sayHello', {get: function(){ return "hello I'm an array" }); 现在,我想使此更改对导入模块的任何脚本都可见。这可能吗 我试图相应地修改导出的_符号,但到目前为止没有结果 有没有其他方法可以达到同样的效果?(即加载向选定对象(如上例中的数组)添加不可枚举属性的模块) 编辑: 下面是Al
Object.defineProperty(Array.prototype,
'sayHello', {get: function(){ return "hello I'm an array" });
现在,我想使此更改对导入模块的任何脚本都可见。这可能吗
我试图相应地修改导出的_符号,但到目前为止没有结果
有没有其他方法可以达到同样的效果?(即加载向选定对象(如上例中的数组)添加不可枚举属性的模块)
编辑:
下面是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";
}
});
如果属性只是只读常量值,请使用值:
:
Object.defineProperty(Array.prototype, 'sayHello', {
value: "hello I'm an array"
});
这两种方法的用法都是:
var hello = myArray.sayHello;
还应使用值:
类型将函数添加为原型的不可枚举属性,例如:
Object.defineProperty(Array.prototype, 'sayHello', {
value: function(o) {
return "hello I'm an array";
}
});
用法:
var hello = myArray.sayHello();
类似地,属性描述符中的
get:
类型可用于提供在运行时计算的只读值:
Object.defineProperty(Array.prototype, 'sayHello', {
get: function() {
return "hello I'm an array";
}
});
如果属性只是只读常量值,请使用值:
:
Object.defineProperty(Array.prototype, 'sayHello', {
value: "hello I'm an array"
});
这两种方法的用法都是:
var hello = myArray.sayHello;
还应使用值:
类型将函数添加为原型的不可枚举属性,例如:
Object.defineProperty(Array.prototype, 'sayHello', {
value: function(o) {
return "hello I'm an array";
}
});
用法:
var hello = myArray.sayHello();
同样地,sayHello应该是函数还是只读值?我想实际创建这两个值。我使用defineProperty()成功地做到了这一点,但我无法通过从模块导出使其工作,因为我不清楚。我想要返回只读值的属性和返回函数的属性我的意思是,您想调用
myArray.sayHello()
,还是获取该函数返回的myArray.sayHello
的字符串值。好的,让我们集中精力调用myArray.sayHello()sayHello
应该是函数还是只读值?我想实际创建这两个值。我使用defineProperty()成功地做到了这一点,但我无法通过从模块导出使其工作,因为我不清楚。我想要返回只读值的属性和返回函数的属性我的意思是,您想调用myArray.sayHello()
,还是获取该函数返回的myArray.sayHello
的字符串值。好的,让我们集中精力调用myArray.sayHello()感谢您的澄清,但我仍然有问题,让这从一个模块内的工作。我将编辑此问题以添加一个更好的示例。@lou我确实对此感到好奇,但您不知道这是在什么样的环境中进行的。感谢您的澄清,但我仍然有问题,无法在模块中实现此功能。我将对问题进行编辑,以添加一个更好的示例。@lou我确实对此感到好奇,但您不知道这是一个什么样的环境。