Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用模块中的defineProperty_Javascript_Ecmascript 5 - Fatal编程技术网

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我确实对此感到好奇,但您不知道这是一个什么样的环境。