作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 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/
我是一名优秀的程序员,十分优秀!