再论JavaScript的继承
程序员文章站
2022-06-03 19:30:21
...
Yahoo 的Stoyan Stefanov 发表了一篇好文章-JavaScript的 class-less对象 。
他将这篇文章发表在了JavaRanch上,在Java社区来讨论他们的不同之处。
他深入的研究了:
*JavaScript对象
这是一个空对象
var myobj = {};
你可以添加一些有用的功能:
myobj.name = "My precious"; myobj.getName = function() {return this.name};
你也可以用另一种方法来创建对象和添加属性:
var another = { name: 'My other precious', getName: function() { return this.name; } };
*构造函数
这是一个创建构造函数的例子:
function ShinyObject(name) { this.name = name; this.getName = function() { return this.name; } }
如今你可以这样来创建对象,更像Java:
var my = new ShinyObject('ring'); var myname = my.getName(); // "ring"
*函数的对象和属性
*继承
*复制继承的属性
假设你有这些对象:
var shiny = { shiny: true, round: true }; var normal = { name: 'name me', getName: function() { return this.name; } };
如何来得到这些属性:
function extend(parent, child) { for (var i in parent) { child[i] = parent[i]; } } extend(normal, shiny); // inherit shiny.getName(); // "name me"
*Crockford的beget对象:
function begetObject(o) { function F() {} F.prototype = o; return new F(); }
*YUI的扩展()
function extend(Child, Parent) { var F = function(){}; F.prototype = Parent.prototype; Child.prototype = new F(); }