您好我正在尝试学习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?
答案 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