从prototype.object

时间:2015-07-03 08:46:25

标签: javascript

这是一个例子。我想在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()




3 个答案:

答案 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();