我试图理解一些我不经常使用的JavaScript原型概念。这里我有两个相同的方法,一个用于Array,另一个用于Function。一个工作,另一个不工作。你能解释一下有什么不同吗?
v6.3.1
答案 0 :(得分:3)
你正在扩展'函数prototype
但在print
上调用String
函数。
将您的代码更改为:
String.prototype.print = function () {
console.log(this);
}
它会起作用。
答案 1 :(得分:2)
错误说明你的代码中的问题,你没有在String原型上定义打印功能,而是在你没有使用的功能上做了。
String.prototype.print = function () {
//^^^^^--
console.log(this);
}
var arr = ['test'];
var string = 'test';
Array.prototype.print = function() {
console.log(this);
}
String.prototype.print = function() {
console.log(this);
}
arr.print(); // logs the arr with value 'test'
string.print(); //logs string.print is not a function

答案 2 :(得分:1)
第一个有效,因为你做得对。您已将print
功能添加到Array
。
第二个不起作用,因为你做错了。您需要将print
函数添加到String
:
String.prototype.print = function () {
console.log(this);
}
答案 3 :(得分:1)
string inherit String,你可以像这样将String方法添加到String原型中:
String.prototype.print = function () {
console.log(this);
}
答案 4 :(得分:1)
[Array,Function,String,Object].forEach(n=>n.prototype.print=function(){
console.log(this);
});
简短形式......
答案 5 :(得分:1)
如果您正在尝试扩展函数原型并访问String原型。你误解了原型继承概念
var arr = ['test'];
var string = 'test';
var someMethod = function(){ /* some code */ };
Array.prototype.print = function(){
console.log(this);
}
String.prototype.print = function () {
console.log(this);
}
//Extending the prototype of Function
Function.prototype.print = function () {
console.log(this);
}
arr.print(); // logs the arr with value 'test'
string.print(); //logs string.print is not a function
someMethod.print(); // this will trigger the print method
// extended in Function Prototype.
<强>更新强>
非常有趣的一点我在Javascript中意识到了这篇文章。它是 您可以将函数原型视为其他原型。想象一下你是谁 扩展函数本身的功能(看起来像一个 有点开始)。所以有一些有趣的方法,如
call, apply , bind
。所以我们可以扩展甚至功能的功能。如果我错了,纠正我,不像 我能想到的任何其他语言,似乎扩展功能 是不可能的。鉴于我们没有特权接触 该语言的源代码。 JS中非常强大的功能。