我正在尝试使用map
编写一行代码。
这是一个简单的设置。
function Cat(name) {
this.name = name;
// FYI: using __proto__ is discouraged. thanks @KarelG
this.__proto__.mew = function () {
console.log(this.name + " mews");
};
}
var cats = [
new Cat('MB'),
new Cat('503')
];
然后,我可以使用map()
来调用猫中的mew
方法。
cats.map(function (cat) {
cat.mew();
});
// MB mews
// 503 mews
call()
在原型上同样有效。
cats.map(function (cat) {
Cat.prototype.mew.call(cat);
});
// MB mews
// 503 mews
这是我的最终一行代码,但是它会产生错误,我不明白为什么:
cats.map(Cat.prototype.mew.call);
// Uncaught TypeError: undefined is not a function
// at Array.map (<anonymous>)
检查 typeof Cat.prototype.mew.call
,它应该是一个function
,而且map()
的参数应该是一个函数。
有人能解释为什么它不起作用吗? 我错过了什么,需要在哪里进行更正?
cats.map((Cat) => Cat.mew.call());
或者像这样:cats.map(function(Cat) { Cat.mew.call()});
- Aswin Ramesh__proto__
将函数添加到内部[[Prototype]]
是不鼓励的(主要是由于原型的性质可能会影响性能)。即使有一个支持__proto__
的函数(该函数是Object.setPrototypeOf()
),我也不应该使用它。 - KarelG