在jquery事件处理程序中使用时,Prototype属性未定义

时间:2014-11-25 17:50:52

标签: javascript jquery prototype

我在从该对象上的方法访问对象的属性时遇到问题。问题的形式如下:

function Person() {
    this.siblings = {
        brothers: ["Adam", "Carl"],
        sisters: ["Betty", "Dorothy"]
    };

    this.first_sister = function() { console.log(this.siblings.sisters[0]); }

    this.button_event = function() { $(".btn").on("click", this.first_sister); }
}

Fanny = new Person();
Fanny.button_event();

而不是记录"贝蒂"到了控制台,我的代码记录了#34; Uncaught TypeError:无法读取属性'姐妹'未定义"当按下.btn元素时。

但是,如果我打开控制台并输入console.log(Fanny.siblings.sisters [0])或Fanny.first_sister(),它将返回" Betty"。

我认为这与我如何使用'这个'有关。在jquery事件处理程序中,但我没有尝试过(那个=等等)有帮助。发生了什么事?

1 个答案:

答案 0 :(得分:0)

如果您var that = this范围的根目录Person应该注意了解您所指的this



function Person() {
  var self_person = this;
  self_person.siblings = {
    brothers: ["Adam", "Carl"],
    sisters: ["Betty", "Dorothy"]
  };

  self_person.first_sister = function() {
    $("#out").append(self_person.siblings.sisters[0] + "<br/>");
  }

  self_person.button_event = function() {
    $(".btn").on("click", self_person.first_sister);
  }
}

Fanny = new Person();
Fanny.button_event();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button class="btn">Clickme</button>
<br/>
<div id="out"></div>
&#13;
&#13;
&#13;