0

下面是一些解释错误的示例代码:

HTML:
<!DOCTYPE HTML>
<html>
<head>
  <title>Test</title>
</head>
<body>
  <h1>Widget Test</h1>
  <script type="text/javascript">
    (function() {
      var script = document.createElement('script'); script.type = 'text/javascript';           
      script.async = true;
      script.src = 'http://localhost/job/widget.js';
      var s = document.getElementsByTagName('head')[0].appendChild(script);
    })();
  </script>
  <div id="list" data-cnumber="21"></div>
</body>
</html>


widget.js:

(function() {
  var a = new app();
  var a1 = new app1();

  function app() {
    this.a;
    this.b;
  }
  app.prototype.add = function () {

  };

  function app1() {
    this.a;
    this.b;
    this.c;
    this.add();
  }
  app1.prototype.add = function () {

  };
})();
  1. 这是错误 - “未捕获的类型错误:对象 # 没有方法 'add'”
  2. 在对这两个对象进行 console.log 时,我可以看到它们的属性,但由于某种原因看不到它们的方法。

怎么了?

4

2 回答 2

1

您在调用构造函数之后创建原型成员,因此它们在构造函数调用期间不可用,必须在调用构造函数之前创建它们。

(function() {
  app.prototype.add = function () {

  };
  app1.prototype.add = function () {

  };

  var a = new app();
  var a1 = new app1();

  function app() {
    this.a;
    this.b;
  }


  function app1() {
    this.a;
    this.b;
    this.c;
    this.add();
  }

})();
于 2013-09-28T19:12:29.090 回答
1

在将“add”函数添加到原型之前调用“app1”的构造函数。尝试在原型中添加“add”函数后调用构造函数。

于 2013-09-28T19:14:14.560 回答