iLife的Javascript对象继承

iLife的Javascript对象继承,javascript,inheritance,iife,Javascript,Inheritance,Iife,我正在为HTML5/CSS3/JS网络小部件游戏使用IIFE。为此,我想创建专门的异常对象,它们是单个对象的后代。我是在尝试不可能的事情吗 到目前为止,代码是 window.Exception = (function(t) { Exception.title = t; Exception.msg = ''; function Exception(message) { this.msg = message; } Exception.prototype = { toStrin

我正在为HTML5/CSS3/JS网络小部件游戏使用IIFE。为此,我想创建专门的异常对象,它们是单个对象的后代。我是在尝试不可能的事情吗

到目前为止,代码是

window.Exception = (function(t) {
  Exception.title = t;
  Exception.msg = '';
  function Exception(message) { this.msg = message; }
  Exception.prototype = {
    toString: function() { return this.title + ': ' + this.msg; }
  };
  return Exception;
})('Exception');

window.RefException = (function(parent, t) {
  RefException.title = t;
  RefException.msg = '';
  function RefException(message) { this.msg = message; }
  RefException.prototype = parent.prototype;
  return RefException;
})(window.Exception, 'Reference Exception');

console.log((new RefException('blah')).toString());

当我查看控制台时,会发现
undefined:blah
,因此
RefException
继承的是原型函数,而不是命名空间变量
title
。我遗漏了什么吗?

似乎我发现了问题,您的代码中有两个逻辑错误:
一些注释:
1.JavaScript有一个名为的属性,它意味着块中的每个变量或函数声明都被JS提升到块的顶部。
2.在JS中,函数也是对象

现在让我们从一段代码开始:

window.Exception = (function(t) {
  Exception.title = t;
  Exception.msg = '';
  function Exception(message) { this.msg = message; }
  Exception.prototype = {
    toString: function() { return this.title + ': ' + this.msg; }
  };
  return Exception;
})('Exception');
此代码段等于:

window.Exception = (function(t) {
      function Exception(message) { this.msg = message; } // <-- Hoisted by JS
      Exception.title = t;
      Exception.msg = '';
      Exception.prototype = {
        toString: function() { return this.title + ': ' + this.msg; }
      };
      return Exception;
    })('Exception');
这句话怎么说

  • 函数异常充当构造函数
  • 将创建一个新对象并将其分配给
  • 名为
    msg
    的新属性将添加到此新创建的对象,并将消息变量的值分配给该对象
  • 该对象将从此函数返回并分配给
    obj
  • 现在,你能找到问题所在吗??
    obj
    对象没有任何名为
    title

    请注意,
    title
    Exception
    object的属性,而不是该构造函数创建的对象的属性

    希望这对你有帮助

    var obj = new Exception();