我昨天发现了js的一些奇怪问题,当用new操作符创建自己的对象时。不知有人知道原因吗?
1、我们可以用function创建构造函数,然后用new生成自己的对象。
function book(){
this.tip="I'm a book";
}
var myBook = new book();
上面代码没什么疑问,会生成一个新的对象,myBook来引用它,这个对象有一个属性tip,值为"I'm a book"
2、当我们在构造函数中加入返回语句时
function book(){
this.tip="I'm a book";
return {};
}
var myBook = new book();
上面在构造函数的最后返回了一个空对象,这时的myBook就是一个空对象,不拥有任何属性。‘this.tip="I'm a book"’就像没起作用。
3、当我们返回的是一个字符串字面量时(数字也可以)
function book(){
this.tip="I'm a book";
return "I'm a string";
}
var myBook = new book();
按道理推测,这时的myBook就该引用的是字符串对象"I'm a string",但事实上是myBook和1中的一样,引用了一个对象,该对象有一个属性tip,值为"I'm a book",这时的return为什么没用了
。
4、当我们以另一种方式返回一个字符串时(数字一样)
function book(){
this.tip="I'm a book";
return new String("I'm a string");
}
var myBook = new book();
这时的myBook引用的就是字符串"I'm a string",这个和3中有什么不同?
所以,我想知道new操作符做了些什么,机制又是如何的?
分享到:
相关推荐
使用`ol.style`模块可以创建自定义的图层样式,包括图标、填充色、描边等。例如: ```javascript var style = new ol.style.Style({ fill: new ol.style.Fill({ color: 'rgba(255, 255, 255, 0.6)' }), ...
Java动态代理是Java语言提供的一种强大的机制,它允许在运行时创建具有特定接口的代理类对象,这些代理类对象能够对方法调用进行拦截和增强。动态代理在很多场景下非常有用,例如AOP(面向切面编程)、事件监听、...
因此,频繁地修改字符串应避免使用String,转而使用可变的`StringBuffer`或`StringBuilder`类,它们在修改时不会创建新对象,从而提高性能。 第四个问题涉及到**数组和集合的区别**。在Java中,数组是一组相同类型...
2. **Pull生成XML和解析XML**:Pull解析器是一种轻量级的API,它允许开发者按需读取XML,不需要处理事件或创建自定义处理器。生成XML时,开发者可以通过调用方法来构建XML结构。 生成XML示例: ```java ...
同时,为了实现更复杂的图形,可以利用多边形和曲线的组合,或者使用Path对象来绘制自定义形状。 "VBNET_CAD-2"可能是相关代码示例或教程的文件名,打开这个文件将能进一步了解如何在VB.NET环境中实现CAD图形的完整...
Bitmap对象在内存中存储图像数据时,有多种不同的格式,每种格式定义了像素数据的排列方式。其中,ARGB_8888是最常见的一种,它代表每个像素由4个8位(1字节)的通道组成:Alpha(透明度)、Red、Green和Blue。这四...
你可以通过`new PrinterSettings()` 创建一个实例,并使用`PrinterSettings.DefaultPageSettings` 来获取或设置打印机的默认页面设置。 2. **PageSettings** 类:此类包含了关于页面布局的具体信息,如纸张大小(A4...
// 创建绘图对象 Drawing drawing = sheet.createDrawingPatriarch(); // 插入图片 Picture pict = drawing.createPicture(anchor, wb.addPicture(...)); ``` #### 六、结语 本文档仅提供了 POI3.5 HSSF 和 XSSF ...
理解这些结构有助于更深入地使用Xib,比如自定义Xib的加载逻辑。 7. **加载与使用Xib** 在代码中,你可以使用`NSBundle`和`UINib`加载Xib文件,然后实例化其中的对象。这通常在控制器中完成,以便在运行时动态加载...
1. **创建自定义窗体类**:首先,你需要创建一个继承自`System.Windows.Forms.Form`的自定义窗体类,以便可以覆盖或扩展其默认行为。 ```csharp public class GradualForm : Form { // ... } ``` 2. **绘制渐变...
在创建图表时,你需要先准备数据,这可以是静态XML文件、动态服务器端脚本(如PHP、ASP.NET或Java)生成的XML,或者直接用JSON对象。 1. **安装与引入**:在你的项目中引入FusionCharts库,通常通过下载并链接到...
2. 初始化地图:使用`BMap.Map`类创建地图实例,并设置地图的中心点坐标和缩放级别。 3. 添加覆盖物:通过`BMap.Marker`、`BMap.Polyline`、`BMap.Polygon`等类创建不同类型的覆盖物,然后将其添加到地图上。 例如...
- 如何在Spinner中使用自定义的数据模型,例如,如果数据不是简单的字符串,而是复杂的对象。 - 如何在Spinner中添加默认选中项。 - 如何在Spinner中处理空值的情况。 - 如果涉及网络数据,可能还会介绍如何异步加载...
5. **XML序列化与反序列化**:ASP.NET C#提供了一种将对象转换为XML字符串或将XML字符串还原为对象的方法。`XmlSerializer`类是实现这一功能的关键。序列化: ```csharp public class MyClass { ... } MyClass obj =...
2. **类与对象**:C++的核心是面向对象编程,源程序将展示如何定义类、创建对象、成员函数的使用以及封装、继承和多态等概念。 3. **构造函数与析构函数**:这些特殊成员函数用于对象的初始化和清理,源码中会体现...
swfu = new SWFUpload({ upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload_f9.swf", file_size_limit : "20480" }); }; 以下是一个标准的...
在使用MyEclipse进行Java开发时,与SQLServer 2008 R2数据库的连接是一个常见的需求。本文主要介绍了一位开发者在经历多次失败后,成功连接SQLServer 2008 R2的过程。 首先,确保SQLServer 2008 R2已经成功安装并...
用来创建邮件对象,包括收件人、抄送人、密送人、主题、正文等。例如: ```csharp MailMessage mail = new MailMessage(); mail.From = new MailAddress("from@example.com"); mail.To.Add("to@example.com"); ...
1. **初始化地图**: 创建一个HTML元素作为地图容器,然后通过`new ol.Map()`实例化地图对象,指定地图容器、图层和视图。 2. **添加图层**: 可以使用`ol.layer.Tile`或`ol.layer.Image`为地图添加瓦片图层,或者用`...