javascript - 如何将函数作为方法添加到返回的数组?
问题描述
我有一个打算与new
构造函数一起使用的函数。它应该返回一个值为 的数组,["Hello World"]
并将函数作为方法包含在内。这是一个示例/演示(对不起,如果它有点难看):
var my_object = function () {
this.foo = function (data) { // alert and add new item
alert(data);
this.push(data);
};
this.bar = function () { // alert and remove last item
alert(this.pop());
};
this.baz = function (stuff) { // replace last item by running previous methods
this.bar();
this.foo(stuff);
};
var a = "Hello World";
return [a];
};
var arr = new my_object(); // ["Hello World"]
正如预期的那样, arr 的值为["Hello World"]
。但是,以下代码会产生错误:
arr.foo('some-text'); // "TypeError: arr.foo is not a function"
其他两个函数也会出现相同类型的错误。在不更改 Array.prototype、在函数外部创建方法或删除初始化的能力的情况下,我能做些什么来完成这项工作new my_object()
?
注意:如果可能,请不要包含使用 jQuery 或其他外部库的答案。
解决方案
正如评论中提到的,这个链接有一些有价值的信息-> https://github.com/wesbos/es6-articles/blob/master/54%20-%20Extending%20Arrays%20with%20Classes%20for%20Custom%20Collections .md
使用它,您的代码可以像这样修改。->
当然这是ES6
,在几天内不可能扩展数组ES5
..
在 Chromeinstanceof
中,当映射按预期工作时,如果这是必需的,则不确定转译的代码是否可以在这里工作。例如,如果您单击此代码段上的使用 Babel 预设,您将看到它失败,因此如果您希望它在旧浏览器上工作,即使已转译也可能是一个问题。
class my_object extends Array {
foo(data) {
alert(data);
this.push(data);
}
bar() {
alert(this.pop());
}
baz(stuff) {
this.bar();
this.foo(stuff);
}
constructor () {
super("Hello World");
}
};
var arr = new my_object(); // ["Hello World"]
arr.foo("some-text");
console.log(arr);
推荐阅读
- python - 如何使用python过滤mongodb游标结果?
- apache - nginx 错误 - nginx: [emerg] "server" 指令在 /etc/nginx/sites-available/default:21 中是不允许的
- macos - 回显但保留所有引号
- arrays - 使用未解决的标识符“WeekOne”
- continuous-integration - 每月发布,瀑布是变相的吗?
- python - Import something by its name
- emacs - How to export in ODT in org-mode?
- angular - Angular same route but different layout depending on logged in state
- angular - How to create multiple components with same logic or 1 component with multiple templates?
- linux - 找不到 yocto-bsp 命令