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

问题描述

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

解决方案

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这个。

解决方案二:

正确的做法是使用prototype
http://blog.csdn.net/zhoutaohenan/article/details/8641551

解决方案三:

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

解决方案四:

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

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

解决方案五:

javascript中的this问题
javascript对象中this问题
Java 类.this含义与.new

时间: 2024-08-31 01:23:02

javascript-Javascript中类的new和类返回this的问题的相关文章

使用 ES6 编写更好的 JavaScript Part II:深入探究 [类]

本文讲的是使用 ES6 编写更好的 JavaScript Part II:深入探究 [类], 在本文的开始,我们要说明一件事: 从本质上说,ES6 的 classes 主要是给创建老式构造函数提供了一种更加方便的语法,并不是什么新魔法 -- Axel Rauschmayer,Exploring ES6 作者 从功能上来讲,class 声明就是一个语法糖,它只是比我们之前一直使用的基于原型的行为委托功能更强大一点.本文将从新语法与原型的关系入手,仔细研究 ES2015 的 class 关键字.文中

JavaScript实现的一个倒计时的类

 这篇文章主要介绍了JavaScript实现的一个倒计时的类,本文直接给出demo代码,需要的朋友可以参考下     近期在做排列五的彩票项目,每一期都有购彩时段,即用户打开这个排列五的页面时,会从服务器传来一个remaintime(离本次彩期结束的剩余时间),然后这个时间在客户端递减呈现给用户看,让用户获得本次彩期的剩余时间. 实现原理挺简单的,在此不在赘述,运行以下代码查看demo: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2

JavaScript实现基于Cookie的存储类实例_javascript技巧

本文实例讲述了JavaScript实现基于Cookie的存储类.分享给大家供大家参考.具体分析如下: 通过这个JS类,你可以象使用session一样使用cookie,非常简单了! /* * CookieStorage.js * 本类实现像localStorage和sessionStorage一样的存储API * 不同的是,它是基于HTTP Cookies实现的. */ function CookieStorage(maxage, path) { // 两个参数分别代表储存有效期和作用域 // 获

Whatever:hover 无需javascript让IE支持丰富伪类_javascript技巧

这很酷,因为这使你可以仅通过 css来对表格行(<tr>)应用鼠标滑过事件(mouseover)时的特殊效果.然而,万恶的IE,对 :hover伪类顶多只提供了有限的支持,具体支持的程度要取决于你的IE浏览器的具体版本. Whatever:hover 是一个小小的脚本,它可以迅速.自动地为IE6,IE7,IE8添加标准的 :hover.:active 和:focus 伪类支持.第三版引入了 ajax 支持,意味着通过 javascript动态添加到文档中的任意html元素也同样可以在IE中响应

JavaScript搜索字符串并将搜索结果返回到字符串的方法

 本文实例讲述了JavaScript搜索字符串并将搜索结果返回到字符串的方法.分享给大家供大家参考.具体如下: javascript操作字符串带有一个match方法用于搜索字符串,如果找到指定的字符串则返回搜索字符串,如果未找到则返回null,match方法区分大小写 1 2 3 4 5 6 7 8 9 10 11 12 <!DOCTYPE html> <html> <body> <script> var str="Hello world!&quo

javascript实现博客园页面右下角返回顶部按钮

 这篇文章主要介绍了使用javascript实现博客园页面右下角返回顶部按钮的思路及源码,非常不错,这里推荐给小伙伴们     博客园中很多博友的博客中在Page右下角都有个图标,不论屏幕怎么拉伸,都始终停留在右下角.点击后页面置顶.后面想想写一个Demo来实现这种效果吧. 一. 图标右下角固定. 1.SS 里面提供了4中布局方式. 其中fixed表示绝对定位元素.所以我们选择使用fixed来实现图标固定.   absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进

Javascript无参数和有参数类继承问题解决方法

 这篇文章主要介绍了Javascript无参数和有参数类继承问题解决方法,本文讲解了无参数类继承的问题和有参类继承的问题,并给出了解决方案,需要的朋友可以参考下     说到Javascript的类继承,就必然离不开原型链,但只通过原型链实现的继承有着不少缺陷. 无参数类继承的问题 先看一段示例代码,实现B继承于A: 代码如下: function A() { } A.prototype.a1 = function() { };   function B() { } B.prototype = n

javascript简单实现跟随滚动条漂浮的返回顶部按钮效果_javascript技巧

本文实例讲述了javascript简单实现跟随滚动条漂浮的返回顶部按钮效果.分享给大家供大家参考,具体如下: 比较优秀的一款超过一屏高度才显示的,跟随滚动条漂浮的返回顶部按钮特效代码. 运行效果如下图所示: 完整实例代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quo

JavaScript 监控微信浏览器且自带返回按钮时间_javascript技巧

比如现在有一个操作 是 A->B->C->B 在B页面的返回键 第一次返回的是C 如果想直接返回A或者其他地方 则需要触发返回事件 pushHistory(); window.addEventListener("popstate", function(e) { //alert("我监听到了浏览器的返回按钮事件啦");//根据自己的需求实现自己的功能 window.location = 'http://www.baidu.com'; }, false