gpt4 book ai didi

Javascript 对象继承与 iife

转载 作者:行者123 更新时间:2023-11-28 01:25:23 25 4
gpt4 key购买 nike

我正在使用 IIFE 来开发 HTML5/CSS3/JS Web 小部件游戏。为此,我想创建作为单个对象的后代的专门异常对象。我正在尝试不可能的事吗?

到目前为止的代码是

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 继承了原型(prototype)函数,但没有继承命名空间变量 title.我错过了什么吗?

最佳答案

看来我发现了问题,您的代码中有两个逻辑错误:
一些注意事项:
1. JavaScript 有一个名为 Hoisting 的属性,这意味着 block 中的每个变量或函数声明都被JS提升到 block 的顶部。
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');

现在让我们分析一下这段代码:
- 您创建一个名为 Exception
类型函数的对象(不是类) - 您已向此对象添加了一些名为 titlemsg
的属性(与其他文字对象一样) - 您已将一个文字对象分配给Exception.prototype
- 最后返回对象异常,这是一个带有一些附加属性的简单函数。

现在让我们用这个函数做一些测试:

var obj = new Exception();

这个语句会发生什么?

  1. 函数异常充当构造函数
  2. 将创建一个新对象并将其分配给 this
  3. 名为 msg 的新属性将添加到这个新创建的对象中,并且消息变量的值将分配给它
  4. 这个对象将从该函数返回并分配给obj

现在,你能找出问题所在吗?
obj 对象没有任何名为 title 的属性
请注意,titleException 对象的属性,NOT 是此构造函数创建的对象的属性

希望这对您有帮助!

关于Javascript 对象继承与 iife,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22740156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com