gpt4 book ai didi

javascript - 如何在另一个对象方法中引用一个对象方法

转载 作者:行者123 更新时间:2023-11-28 21:21:47 24 4
gpt4 key购买 nike

我对 javascript 的 OOP 缺乏基本的了解。我的理解是我可以制作这样的类(class)

var Car = function(){}

Car.prototype.GetBrand = function(){ return "Ford";}
Car.prototype.GetYear = function(){ return "1989";}

var ford = new Car();

ford.GetBrand();
ford.GetYear();

这有效...现在我想实现一个函数 GetInfo,这应该打印出品牌和日期

如何在 GetInfo() 方法中引用 GetBrand() 和 GetYear() 方法。

  This is not working:
Car.prototype.GetInfo = function(){
return this.GetBrand()+ ' '+ this.GetYear();
}

这不是正确的访问器...我在这里想念什么?

确定编辑:这是一个简化的示例,我的 realy 方法调用位于另一个函数中,这就是我们讨论另一个作用域的原因:

JsonLoader.prototype.GetJsonAndMerge = function(url,template,tagToAppend){
$.ajax({
url: url,
dataType: 'json',
success: function(data) {
this.ShowItems(data,template,tagToAppend);
}
});
}

我尝试访问我的 ShowItems 方法...这里,这又是在一个函数中,这可能是 this 运算符不起作用的原因...抱歉造成困惑 =/

最佳答案

您错过了意外的递归:

Car.prototype.GetInfo = function (){  
return this.GetBrand()+ ' '+ this.GetYear(); // instead of GetInfo() !
}

然后你就可以调用

ford.GetInfo() // returns "Ford 1989"
<小时/>

编辑:这里使用prototype的原因是为了节省内存。当您调用 new Car() 时,对象会被复制,而不是传统意义上的“构造”。调用 new

var Car = function(){
this.GetBrand = function(){ return "Ford";}
this.GetYear = function(){ return "1989";}
}

还将函数体复制到每个实例。这就是为什么将方法放入原型(prototype)链中是有意义的。此外,只有在将函数添加到原型(prototype)链时,才可以将函数添加到已存在的实例中。

另请注意,约定仅将构造函数的第一个字母大写,因此 Car 没问题,但 GetInfo 应该getInfo

<小时/>
JsonLoader.prototype.GetJsonAndMerge = function(url,template,tagToAppend){
var self = this;
$.ajax({
url: url,
dataType: 'json',
success: function(data) {
self.ShowItems(data,template,tagToAppend);
}
});
}
}

关于javascript - 如何在另一个对象方法中引用一个对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6161986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com