`

Parasitic Inheritance

 
阅读更多
Here's an ordinary object, defined with an object literal, and unaware of the fact that it is soon going to fall victim to parasitism:
var twoD = {
name: '2D shape',
dimensions: 2
};


A function that creates triangle objects could:
1.Clone the twoD object into an object called that. This can be done in 2.any way you saw above, for example using the object() function or copying all the properties.
3.Augment that with more properties.
Return that.


function triangle(s, h) {
var that = object(twoD);
that.name ='Triangle';
that.getArea = function(){return this.side * this.height / 2;};
that.side = s;
that.height = h;
return that;
}


Because triangle() is a normal function, not a constructor, it doesn't require the new operator. But because it returns an object, calling it with new by mistake will work in exactly the same way.


>>> var t = triangle(5, 10);
>>> t.dimensions
2
>>> var t2 = new triangle(5,5);
>>> t2.getArea();
12.5

Note that that is just a name; it doesn't have a special meaning, the way this does.





分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics