这个关键字和原型

时间:2014-02-04 01:08:37

标签: javascript inheritance prototype this

您好我正在尝试学习JavaScript,而且我来自C ++的背景,所以这对我来说非常困惑。我的代码看起来像这样

var someArray = [];
nameCompare = function(this.first,this.second) 
{
    if(first.name == second.name)
    {
        return 0;
    }
    else if(first.name < second.name)
    {
        return -1;
    }
    else
    {
        return 1;
    }
};

someArray.tempSort = function(){
    return this.sort(nameCompare);
};
var someOtherArray= Object.create(someArray);
someOtherArray.push({name: 'A', price: 3, rating: 2, distance: 2},
        {name: "B", price: 1, rating: 5, distance: 1},
        {name: 'C', price: 2, rating: 3, distance: 5},
        {name: 'D', price: 5, rating: 4, distance: 8});
console.log(someOtherArray.tempSort());

我对this关键字感到困惑,因为someArray从someOtherArray获取其属性并且我想按名称排序我不知道如何从someOtherArray中正确调用name属性。我理解this关键字引用当前对象但是我'我还是迷路了。出于某种原因,我不断收到关于缺少形式参数的错误,我是否可以通过辅助函数传递this.first和this.second?

2 个答案:

答案 0 :(得分:1)

您不需要将this.x传递给您的参数,只需传递变量(a和b如下):

var someArray = [];
nameCompare = function (a, b) {
    if (a.name == b.name) {
        return 0;
    } else if (a.name < b.name) {
        return -1;
    } else {
        return 1;
    }
};

this传递给函数的参数会给您错误。查看关键字的MDN's部分。

答案 1 :(得分:0)

以上是您尝试执行的操作版本:http://jsfiddle.net/TfM5U/

一些注意事项:

这一行nameCompare = function(this.first,this.second)定义了一个函数并将其分配给nameCompare变量。你放在()中的只是你可以在该函数的上下文中使用的名称。所以没有理由在这里使用this.

这一行var someOtherArray= Object.create(someArray);。您可以在此处详细了解Object.create()https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create