iLife的Javascript对象继承
我正在为HTML5/CSS3/JS网络小部件游戏使用IIFE。为此,我想创建专门的异常对象,它们是单个对象的后代。我是在尝试不可能的事情吗 到目前为止,代码是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
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();