stophin 2016-04-17 14:38 采纳率: 50%
浏览 1411
已采纳

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会对内存有分配吗?

  • 写回答

4条回答

  • 我爱默小兜 2016-04-18 00: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这个。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图2.0 版本点聚合中Marker的位置无法实时更新,如何解决呢?
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题