在函数原型中使用'this' - JavaScript

时间:2017-06-23 08:42:39

标签: javascript

我试图理解一些我不经常使用的JavaScript原型概念。这里我有两个相同的方法,一个用于Array,另一个用于Function。一个工作,另一个不工作。你能解释一下有什么不同吗?

v6.3.1

6 个答案:

答案 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中非常强大的功能。