2 stophin stophin 于 2016.04.17 22:38 提问

Javascript中类的new和类返回this的问题

使用Javascript创建两个类
function RectF(x, y, w, h) {
this.X = x;
this.Y = y;
this.Width = w;
this.Height = h;
...
}
function PointF(x, y) {
this.X = x;
this.Y =y;
}
使用时我想像C语言那样传参数进去:
int ret = isin(RectF(10,10,10,10), PointF(2,19));
结果不敢想像!为什么?因为上面使用的只是多重函数嵌套调用,根本没有类!然而这两个function没有返回值,
传给isin的两个参数都是undefined!
应该这样调用int ret = isin(new RectF(10,10,10,10), new PointF(2,19));
不过我试着在两个类的最后添加上reurn this;结果就正确了!
所以问题来了:使用return this返回的究竟是什么?难道返回this和加new是一样的效果吗?那么返回this会对内存有分配吗?

5个回答

hsd2012
hsd2012   2016.04.18 08:20
已采纳

function PointF(x, y) {
this.X = x;
this.Y =y;
}
如果直接调用即var p= PointF(x, y) ;此时函数中this,代表全局变量对象,也就是window,其中,x、y为全局变量,你可以通过window.x访问x。也可以直接输出x、y。
如果通过var p=new PointF(x, y) ;此时函数中this,代表的是构造函数PointF创建的对象,其中x,y为局部变量。
如果你想通过var p= PointF(x, y) ;调用,并且创建一个新的对象。你可以改写PointF函数如下
function PointF(x,y){
var o=new Object();
o.x=x;
o.y=y;
return o;
}
关于JS对象创建,详细信息,你可以参考http://blog.csdn.net/hsd2012/article/details/50978425这个。

showbo
showbo   Ds   Rxr 2016.04.18 08:57

int ret = isin(new RectF(10,10,10,10), new PointF(2,19));

这样写不需要再RectF中return this,直接就是RectF的实例了,默认就会return this,没有new则是调用函数,如果没有return语句,那么默认就是return undefined

caozhy
caozhy   Ds   Rxr 2016.04.17 23:11
qq970973742
qq970973742   2016.04.18 08:29

this是指向調用此函數的運行環境的對象(與引用差別很大).new 是通過構造函數方法創建一個類似與創建類對象的數據對象.既然產生新的對象,并產生對對象引用的值傳遞,肯定會涉及分配內存.至於上面所說的prototype,其實正確的是和普通構造函數一起搭配使用才是正確的模式.不過其也具備很大限制條件

CSDNXIAOD
CSDNXIAOD   2016.04.17 22:42

javascript中的this问题
javascript对象中this问题
Java 类.this含义与.new
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!