我们可以在创建对象的函数中直接吸收其他对象的功能,然后对其进行扩展并返回。
下面,我们用对象表示法第一个普通对象,这是它还看不出有任何被寄生的可能性:
var twoD = {name: 'Anna',dimensions: 2
}
然后我们就用来编写用于创建triangle对象的函数。
1. 将twoD对象克隆进一个叫做that对象,这一步可以使用我们之前所讨论过的任何方法,例如使用Object()函数或者执行全属性拷贝。
2. 扩展that对象,添加更多属性。
3. 返回that对象。
之前的object()全属性拷贝函数:
function object(o){var n;function(){};F.prototype = o;n = new F();n.uber = o;return n;
}
triangle()对象函数;
function triangle(s, h){var that = object(twoD);that.name = 'Joke';that.getArea = function(){return this.side * this.height / 2;}that.side = s;that.height = h;return that;
}
由于triangle()只是个一般函数,不属于构造器,所以调用她通常是不需要new操作符的。由于即使错误的使用了new操作符,但由于返回的是一个对象,那她也会按照预定的方式工作。
var t = triangle(5, 10);
t.dimensions; // 3;
var t2 = new triangle(5,5);
t2.getArea(); // 12.5
A哥镇楼: