这是一个例子。我想在animal.skills.kick()中获取Animal上下文。我该如何实现呢?
function Animal(name) {
this.name = name;
}
Animal.prototype.run = function() {
console.log('..running')
}
Animal.prototype.skills = {
kick: function() {
console.log(this)
}
}
var animal = new Animal('rabbit');
animal.skills.kick()

答案 0 :(得分:1)
你想要做的事情听起来像是一个非常糟糕的设计,但一种方法是在构造函数中移动技能声明:
function Animal(name) {
this.name = name;
var that = this;
this.skills = {
kick: function() {
console.log(that);
}
};
}
Animal.prototype.run = function() {
console.log('..running');
}
var animal = new Animal('rabbit');
animal.skills.kick();
答案 1 :(得分:0)
你必须在踢动物中添加一个参数并传入你的动物,否则你必须创造踢动作为动物而不是技能的成员函数。
'这'是指调用该方法的对象。在您的代码中,技能对象调用了该方法。技能是动物的一部分(属性),但技能不是动物。
以下方法可行:
function Animal(name) {
this.name = name;
}
Animal.prototype.run = function() {
console.log('..running')
}
Animal.prototype.skills = {
kick: function(animal) {
console.log(animal)
}
}
var animal = new Animal('rabbit');
animal.skills.kick(animal)
答案 2 :(得分:0)
请添加this.skills.className = this.name;到班级
function Animal(name) {
this.name = name;
this.skills.className = this.name;
}
Animal.prototype.run = function() {
console.log('..running');
};
Animal.prototype.getName = function() {
return this.name;
};
Animal.prototype.skills = {
dummy: 6,
kick: function() {
console.log(this);
console.log(this.className);
}
};
var animal = new Animal('rabbit');
animal.skills.kick();