第一种:
function Point(x, y) {
this.x = x;
this.y = y;
}
Point.prototype.add= function () {
return this.x
};
var p = new Point(1, 2);
第二种:
function point2(x,y){
var o = {};
o.x = x;
o.y = y;
o.add= function(){
return o.x
}
return o
}
var p1 = point2(1,2)
请问两者之间的差异?
谢邀,:))
第一种和第二种主要有两个区别。
先看第二种:
这种方法非常好理解,但是有两个缺陷:
每个由
Point2
创建的实例都有各自的add
方法,这就需要注意两个地方:p1.add !== p2.add
, 它们各有一份内存Point2.prototype.add
, 不会影响p1
和p2
以及其他实例。当然,改变p1.add
更不会影响p2.add
p1 instanceof Point2 === false
(而不是true
!!!!), 但是p1 instanceof Object === true
.再看第一种方法:
这种方法比较难理解的地方是
new
:这跟上面的方法有两个不同的地方:
Point
创建的实例共享同一个add
方法(所以更节省内存),即是p1.add === p2.add
, 这需要注意,如果改变Point.prototype.add
, 是会影响到所有实例(包括p1
,p2
...)的,但是改变p1.add
不会影响到p2.add
.p1 instanceof Point === true
,p2 instanceof Point === true
(都不是false
!!!!)