位置:首页 » 技术2 » javascript new构造器与对象详解

javascript new构造器与对象详解

日期:2016-05-24 阅读:1num
Advertisement

今天一个朋友问到js中的new是对象是干什么用的,我找了很多资料,下面有需要的朋友可以参考一下哦。

首先我们拆解为如下代码
JScript code

代码如下 复制代码
var str = function(){
return 'Hello world';
}
alert(new str());
var str1 = function() {
return new String('hello world');
}
alert(new str1())

这个代码和你之前的代码是一个意思,能理解吧。
好我们来实验下。
JScript code

代码如下 复制代码
var str = function(){
return 'Hello world';
}
alert(str);
var str1 = function() {
return new String('hello world');
}
alert(str1)

这个打印出来的结果大家也都是意料之中吧。也是显而易见的,不多解释了。
JScript code

代码如下 复制代码
var str = function(){
return 'Hello world';
}
alert(str());
var str1 = function() {
return new String('hello world');
}
alert(str1())

那么,顺着意思走到这里,得到的结果也无可厚非了。但是为什么,函数作为构造器得到的结果不一样呢。
JScript code

代码如下 复制代码

function str() {
return 'Hello world';
}

function str1() {
return new String('hello world');
}
alert(new str());
alert(new str1());

针对这样的问题,我们需要了解2样东西
1、new()干了神马事
很多童鞋都知道,new function()的时候,会返回this指针对象作为对象引用。但是如上面DEMO里没有this,而是直接return一个值呢。

我们看一个新的例子
JScript code

代码如下 复制代码
var test = 'hello world';
var test1 = new String('hello world');

function testStr(){
return test;
}
function testStr1() {
return test1;
}

alert(new testStr() == test);//outputs:false
alert(new testStr1() == test1);output:true

呀,是不是有点感觉了,但是却又还是搞不清为什么是这样?别急,我们继续看
JScript code

代码如下 复制代码

alert(test instanceof String);
alert(test1 instanceof String);

根据上面的例子,我们看到test不是instanceof String的。那么用typeof也可以看到test的TYPEOF是string。由此我们延伸出一个问题,字面量对象和构造器对象有什么区别么?回答:原型!!!!。
好了,我们在解决了第二个问题,由此可以推回我刚才说的第一个问题,new()做了什么,其实new 做了件我们需要知道的事。就是维护了原型链。
最后我做一个假设。因为我现在并不能确定我说的是否是对的。
JScript code

代码如下 复制代码
function func() {
}
var test = new func();
/* new的过程中做了如下的行为
var returnVal = new Object();
returnVal.prototype = this;//其中这一步未必如此,我们可以理解为复制阶段
if(returnVal is object) { //这个is是instanceof更贴切,或者就是说原型链中能找到继承自object
return returnVal;
} else
return obj;
*/
相关文章
  • javascript new构造器与对象详解

    今天一个朋友问到js中的new是对象是干什么用的,我找了很多资料,下面有需要的朋友可以参考一下哦. 首先我们拆解为如下代码 JScript code 代码如下 复制代码 var str = function(){ return 'Hello world'; } alert(new str()); var str1 = function() { return new String('hello world'); } alert(new str1()) 这个代码和你之前的代码是一个意思,能理解吧.

  • JavaScript字符串处理(String对象)详解

    定义字符串(String)对象 JavaScript String 对象用于处理文本字符串.创建 String 对象语法如下: 代码如下: <script language="JavaScript"> var str_object = new String( str ); var str1 = String( str ); var str2 = str; </script> 以上三种方法中,只有第一种是使用 String 构造函数严格的定义一个字符串对象,返回的

  • javascript的变量 数组 对象详解用法(1/2)

    * 1, 变量类型: JavaScript 是弱类型, 变量可存储任意类型, 并且运行期间类型可变; -> 变量可进行类型转换; */ /* 2, 变量声明: */ var i; var index; var i, index; var i = 0, index = 2; /* 变量声明, 无初始值时, 值为 undefined; 并且 var 声明的变量, 不能使用 delete 操作符删除; 重复声明为产生覆盖, 不会造成错误; 遗漏声明, 则会把变量隐式声明此变量, 并做为全局变量; (下

  • javascript null对象详解

    网页特效 null对象详解 null 这是一个对象,但是为空.因为是对象,所以 typeof null 返回 'object' . null 是 JavaScript 保留关键字. null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值: 表达式:123 + null 结果值:123 表达式:123 * null 结果值:0 以下是不正确的方法: var exp = null; if (exp == null) { alert("is null"); }

  • javascript History 对象详解介绍

    javascript History 对象详解介绍 有需要学习的朋友可参考一下. History 对象 History对象包含用户(在浏览器窗口中)访问过的 URL,History 对象是 window 对象的一部分,可通过 window.history 属性对其进行访问,没有应用于 History 对象的公开标准,不过所有浏览器都支持该对象 History 对象属性 length声明了浏览器历史列表中的元素数量 语法:history.length; 实例:document.write(hist

  • javascript Window 对象详解介绍

    javascript Window 对象详解介绍 大家可参考一上. Window 对象 Window 对象表示浏览器中打开的窗口,如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象. Window 对象集合 frames[] 返回窗口中所有命名的框架,该集合是 Window 对象的数组,每个 Window 对象在窗口中含有一个框架或 <iframe> ,属性 frames.length

  • javascript Screen 对象详解介绍

    javascript Screen 对象详解介绍大家可参考一下. Screen 对象 Screen 对象包含有关客户端显示屏幕的信息,没有应用于 screen 对象的公开标准,不过所有浏览器都支持该对象,每个 Window 对象的 screen 属性都引用一个 Screen 对象 Screen 对象属性 availHeight声明了显示浏览器的屏幕的可用高度,以像素计,在 Windows 这样的操作系统中,这个可用高度不包括分配给半永久特性(如屏幕底部的任务栏)的垂直空间 语法:screen.a

  • 学习札记 JavaScript内置对象详解

    学习笔记 JavaScript内置对象详解 1.Date 属性(1): constructor 所建立对象的函数参考 prototype 能够为对象加入的属性和方法 方法(43): getDay() 返回一周中的第几天(0-6) getYear() 返回年份.2000年以前为2位,2000(包含)以后为4位 getFullYear() 返回完整的4位年份数 getMonth() 返回月份数(0-11) getDate() 返回日(1-31) getHours() 返回小时数(0-23) getM

  • JavaScript中原型和原型链详解 JavaScript中原型和原型链详解

    这篇文章主要介绍了JavaScript中原型和原型链详解,本文讲解了私有变量和函数.静态变量和函数.实例变量和函数.原型和原型链的基本概念,需要的朋友可以参考下 javascript中的每个对象都有一个内置的属性prototype,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用.意思是是prototype属性保存着对另一个JavaScript对象的引用,这个对象作为当前对象的父对象. 复制代码 代码如下: A.prototype = new B(); 理解pr

  • JavaScript的Date()方法使用详解

    这篇文章主要介绍了JavaScript的Date()方法使用详解,是JS入门学习中的基础知识,需要的朋友可以参考下 JavaScript的Date()方法返回今天的日期和时间,并且不需要任何对象被调用. 语法 ? 1 Date() 下面是参数的详细信息: NA 返回值: 返回今天的日期和时间 例子: ? 1 2 3 4 5 6 7 8 9 10 11 <html> <head> <title>JavaScript Date Method</title> &l

  • JavaScript中的Promise使用详解 JavaScript中的Promise使用详解

    这篇文章主要介绍了JavaScript中的Promise使用详解,promise对象是JS进阶学习中的重要知识点,需要的朋友可以参考下 许多的语言,为了将异步模式处理得更像平常的顺序,都包含一种有趣的方案库,它们被称之为promises,deferreds,或者futures.JavaScript的promises ,可以促进关注点分离,以代替紧密耦合的接口. 本文讲的是基于Promises/A 标准的JavaScript promises.[http://wiki.commonjs.org/w

  • JavaScript中的函数模式详解

    这篇文章主要介绍了JavaScript中的函数模式详解,本文讲解了创建函数的语法.函数表达式.命名函数表达式.函数的声明.函数声明与表达式.函数的提升.即时函数模式等内容,需要的朋友可以参考下 JavaScript设计模式的作用是提高代码的重用性,可读性,使代码更容易的维护和扩展 在javascript中,函数是一类对象,这表示他可以作为参数传递给其他函数:此外,函数还可以提供作用域. 创建函数的语法 命名函数表达式 代码如下: //命名函数表达式 var add = function add(

  • 深入了解JavaScript系列:《你真懂JavaScript吗?》答案详解

    深入理解JavaScript系列:<你真懂JavaScript吗?>答案详解 介绍 昨天发的<大叔手记(19):你真懂JavaScript吗?>里面的5个题目,有很多回答,发现强人还是很多的,很多人都全部答对了. 今天我们来对这5个题目详细分析一下,希望对大家有所帮助. 注: 问题来自大名鼎鼎的前端架构师Baranovskiy的帖子<So, you think you know JavaScript?>. 答案也是来自大名鼎鼎的JS牛人Nicholas C. Zakas

  • Javascript中的原形继承详解 Javascript中的原形继承详解

    Javascript中的原型继承详解 js中的继承,是面向对象的知识,因为js没有类的概念,所以继承是通过对象实现的,谈到继承,就必须说到prototype,就不得不先说下new的过程. 一个小小的列子: <script type="text/javascript"> var Person = function () { }; var p = new Person(); </script> 我们来看看这个new究竟做了什么?我们可以把new的过程拆分成以下三步:

  • Javascript沿袭两种形式详解

    Javascript继承两种形式详解 一直想对Javascript再次做一些总结,正好最近自己写了一个小型Js UI库,总结了一下Js的继承机制,在网上也看了一些前辈们博客里的总结,感觉分析不是特别全面.这里仅仅是把自己的学习体会拿出来分享一下,希望对大家学习Javascript有所帮助. Javascript本身是从Perl语言的语法演变而来的,本质上是脚本语言,随着版本的更新逐渐加入的对面向对象的模拟.我认为Js的面向对象模拟总体上做得还是不错的,因为我们不能盲从任何一种理念,不能纯粹的为了

  • jqPlot的Option配备对象详解

    jqPlot的Option配置对象详解 这里主要是参考jqPlot官方网站关于Option的介绍并结自己简单实践和理解来对Option的相关属性进行解释,如有不合适或错误的地方请指正. options = { seriesColors: [ "#4bb2c5", "#c5b47f", "#EAA228", "#579575", "#839557", "#958c12", "#9

  • HTML5拖拽效能中 dataTransfer对象详解

    HTML5拖拽功能中 dataTransfer对象详解 有了HTML5,老板再也不用担心我们的上传了,再加上有拖拽上传是不是很酷.百度一下,有关HTML5拖拽上传的文章和实例不少,都缺不了一个至关重要的东东DataTransfer.但是详细介绍的不多,尤其这个对象到底包含了哪些玩意. FQ出去问了下谷歌找到了DataTransfer的API,下面就介绍一下: DataTransfer 拖拽数据传递对象,一般使用方式event.dataTransfer. dataTransfer . dropEf

  • JavaScript中的execCommand()命令详解及范例展示

    JavaScript中的execCommand()命令详解及实例展示 execCommand方法是执行一个对当前文档,当前选择或者给出范围的命令.处理Html数据时常用 如下格式:document.execCommand(sCommand[,交互方式, 动态参数]) ,其中:sCommand为指令参数(如下例中的"2D-Position"),交互方式参数如果是true的话将显示对话框,如果为false的话,则不显示对话框(下例中的"false"即表示不显示对话框),

  • Intent对象详解(1)

    Intent对象详解(一) Intent的定义: Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的activity, service和broadcast receiver之间的交互.Intent这个英语单词的本意是"目的.意向.意图". 使用Intent启动系统组件: 三种应用程序基本组件--activity, service和broadcast receiver--是使用称为intent

  • java中Hibernate中的数据库对象详解

    本文章来给各位同学介绍一下关于 java中Hibernate中的数据库对象详解 ,希望此教程对大家会有所帮助. 1.hibernate.cfg.xml 代码如下 复制代码 <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.d

最新文章
  • 那些影响排名的用户行为 还不抓紧研究? 那些影响排名的用户行为 还不抓紧研究?

    万马奔腾小编发现,2016年5月,百度算法做出了很大程度的调整,当然百度等搜索引擎的算法调整处于"三天一小调,五天一大动"的情况下,这次调整让很多站长朋友们不知所措!也许新手SEO从业者并没有这样的感觉,因为他们还处于刚开始了解SEO的阶段,迷茫是最主要的,但对于那些从业好久的站长朋友,接下来该如何进行站点优化是目前急需考虑的问题. 就拿小编来说吧,虽然刚接手合肥人才网没多久,可遇到这次调整,再加上大Boss整天对网站的关注,接下来如何开展SEO工作就变成目前的重要思考方向.当然,在知

  • 有非 Retina MBP 升级到 OS X 10.11 系统的吗?升级后体验如何?

    目前使用的是 2012 年中的非 Retina MBP ,系统是 OSX 10.9.5 ,一直在纠结要不要升级到最新的 OS X El Capitan ,所以想问问有非 Retina MBP 升级到 OSX 10.11 系统的吗? --cut-- twoyuan在2016-05-09 17:37:55回答到: MC700 (换了 SSD 升级 8G 内存),升级 10.11 后感觉还不错,甚至感觉比之前 Yosemite 还要好一些,不过机器已经在前两天出了 jxl922在2016-05-09

  • 话说这两天有谁成功开过日本机房的 linode 吗

    我从前天晚上开始,一直到今天早上,都无法创建一个日本东京的linode,最后只能先创建一个美国的,在linode网站上找了半天,也没能发现之前那个具体机房,还有多少个可用的页面 --cut-- anheiyouxia在2014-05-01 08:42:5回答到: 你可以联系客服,让客服帮你转移或者开通 rongbin在2014-05-01 08:46:3回答到: @anheiyouxia 嗯,刚刚已经发了,看看运气怎样,应该自己创建都不能成功,这样的转移应该也不行才是.

  • 开启Win8自动备份功能 开启Win8自动备份功能

    很多不熟悉操作系统的用户都误删过重要的文件.照片或程序.由于他们玩不转电脑,所以文件被删后只能干着急.的确,电脑高手用数据恢复软件恢复文件是分分 钟的事,但新手只能一筹莫展.下面,笔者就向Win8用户介绍一种无需第三方软件的恢复文件方法,那就是Win8系统的自动备份功能. 具体方法: 一.进入Win8控制面板,然后点击左侧的"文件历史记录"选项进入设置; 控制面板-文件历史记录 二.进入文件历史记录设置后,发现文件历史记录功能是默认关闭状况,点击开启(注意:这里需要插入安装盘),连接好

  • 三星n7100 root教程 三星n7100 root教程

    三星Galaxy Note II 已经推出了3天 , 我们今次就是要最先最快的出 ROOT 机教学 , 免得X友们说我们慢了4 其实 Galaxy Note II (N7100) 的 ROOT 方法比之前的简单多了 , 只需 5分钟就可以完成,简单方便. 此教程经亲测后确定ROOT成功才放出!如你在 Root 手机过程中,进行一些不正当操作造成的任何后果(比如刷到一半拔出手机之类等等的操作)需自行承担责任 , 本网对此不负任何责任!!!! 刷机步骤: ROOT前准备 : 1.下载并安装驱动:三星

  • 上班族如何提高自己的睡眠质量 上班族如何提高自己的睡眠质量

    上班族的睡眠质量大多是由精神因素引起的.85%以上的失眠是由精神因素引起的,社会.家庭和工作等矛盾冲突导致的紧张.高兴.焦虑或恐惧可引起失眠,因此失眠患者首先应自我寻找可能存在的精神因素.要保持良好的睡眠,不光要改进夜间睡眠情况,更重要的是能改进白昼的生活质量,防治由失眠而引起的各种疾病.下面小编介绍上班族可从以下几个方面入手,改进自己的睡眠质量: 1.养成良好的生活习惯 睡前不要进行紧张的脑力劳动,制止剧烈的运动或体力劳动,这些都会影响人的睡眠质量.取而代之的应该是在户外散步,尽量减少主观上的

  • PHP遍历XML文档所有节点的方法

    这篇文章主要介绍了PHP遍历XML文档所有节点的方法,实例分析了php操作XML文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了PHP遍历XML文档所有节点的方法.分享给大家供大家参考.具体实现方法如下: 1. contact.xml代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 <contact id="43956"> <personal> <name> <first>J</first>

  • InDesign中英文菜单对照表 InDesign中英文菜单对照表

    actual size 实际尺寸 align 对齐 anchor point 锚点 arrange 排列 assign 分配 assign profiles 指定色彩配置 attributes 属性 baseline 基线 bounding box 限位框 cascade 层叠 cell 单元格 cell options 单元格选项 change case 改变大小写 character 字符 Character sytle 字符样式 character sytle 字符样式 check spe

  • 盘点世界人类历史上10次超级大地震 盘点世界人类历史上10次超级大地震

    据媒体报道,地震是人类无法控制的自然灾害,你想象不到它会在什么时刻,什么地点发生,它所带来的危害是巨大的,带来的损失是惨重的,世界各国都经历过罕见的超级大地震,让我们盘点下近些年来,人类历史上惨痛的超级大地震. 1985年:墨西哥(墨西哥城)/ 震级(里氏):8.1 / 死亡人数:10,000 / 财产损失:40亿美元. 世界各国都经历过罕见的超级大地震,让我们盘点下近些年来,人类历史上惨痛的超级大地震. 2011年:日本/ 震级(里氏):8.9 / 死亡人数:99331人,受伤103733人

  • 中国的纳斯达克要来了!

    深交所创业板正积极酝酿推出,这是近期业内人士都在关注的话题,一则,这一举措使中国资本市场在继中小企业板之后,面对创业者有了更为贴近的创业板,增加了资本市场的多层次体系. 二则,这也将为中国本土创业投资业界的发展提供的强劲的动力,为啥,因为现在一投入,可以不用去海外上市退出,国内就可以退出了,而且人民币基金也可以组建了,可以说创业板,是中国中小企业与创业投资发展的良好保障. 今年中国创业投资额超过20亿美元看来是正常不过的事情了(前三季度已超过20亿美金),按这样的速度发展,今年有望接近30亿美元

热门推荐
  • OpenStack 企业私有云的若干需求(4):混合云支持 OpenStack 企业私有云的若干需求(4):混合云支持 1. 混合云的概念 1.1 什么是混合云 从单个云角度来看,云可以分为三类: 私有云( private cloud) :云基础设施是为一个客户单独使用而构建的,因而提供对数据.安全性和服务质量的最有效控制.私有云可部署在企业数据中心中,也可部署在一个主机托管场所,被一个单一的组织拥有或租用. 社区云( community cloud):基础设施被一些组织共享,并为一个有共同关注点的社区服务( 例如任务.安全要求.政策和遵守的考虑) . 公共云( public cloud) :基础设施是被一个销售
  • 老人斑的消除方法 老人斑的消除方法 是不是有一天照镜子无意中发现脸上竟然长出了老年斑,从此心中就多了一块大石头,明明岁数不大,怎么皮肤就这么提前衰老了,给别人看见多丢人,想找到老年斑怎么去除的方法却不得其门而入.又或者看着妈妈对着脸上的老年斑唉声叹气的,自己心里也不好受,真想帮妈妈解决这个大困扰,让她高兴下.别烦了,秘笈来了,现在就告诉你老年斑怎么去除! 本站阅读配图 第一步 了解老年斑 想知道老年斑怎么去除,必须先了解老年斑.它本质上就是一种脂褐质色素斑块.随着人的年龄进入老年阶段,身体的细胞代谢能力就会逐渐减退,抗氧化能力也会
  • 新娘眼部护肤的四个黄金时刻 新娘眼部护肤的四个黄金时刻 新娘的双眼娇嫩,是我们护肤的重点,但是眼部肌肤应该如何护肤呢?今天小编要提醒在下面四个黄金时刻,你一定要注意眼部保湿补水哦! 出门之前做好眼部防晒 千万不要忽视阳光,加上电脑辐射伤害,都会让原本薄弱.储水量低的眼周迅速流失水分,变得干燥.黯淡,保湿尤其重要.出门前一定要给眼部做足防晒,眼部防晒霜.温和无刺激的底妆都可以. 早上起床边去水肿边补水 在起床后,让消除水肿和迅猛补水同时进行,你需要在前一天晚上就准备如下天然素材:把两片土豆或者两个绿茶包(也需用少许茶水浸润防止干透)放入冰箱冷藏,早上取
  • 傲游云浏览器双核心对比 傲游云浏览器双核心对比 傲游云浏览器是一款非常典型的双核浏览器,很多用户在使用傲游云浏览器的时候,或许只是知道这款浏览器本身是具有双核引擎模式,而对傲游云浏览器的双核,可能不一定有一个比较形象了解.下面我们就将在本文中为大家来体验一下傲游云浏览器两个核心引擎之间的体验,以及两个核之间的速度差异性.我们主要从两个核心之间的HTML5性能表现来探究. 傲游云浏览器极速模式提示/按 傲游云浏览器双核之间的状态,或者双核的相互切换,是可以通过快捷按钮来实现的.如上图所示,图中所标出的标签则是当前浏览器所处的核心状态(此时为极速
  • 懒人该如何健康吃垃圾食品? 懒人该如何健康吃垃圾食品? 很多人由于受到工作学习等其他突发情况的影响,有时候难免会吃到垃圾食品.大家都知道垃圾食品对人体危害很大,严重者还会导致其他疾病,如何健康吃垃圾食品就显得特别重要,今天就为大家介绍懒人该如何健康吃垃圾食品. 本站阅读配图 1.其实还算营养的速冻食品 对很多没时间做饭的白领们而言,速冻饺子可是福音.但是,很多人都担心这东西太没营养.营养专家胡小松说:"我去看过速冻饺子正规企业的生产.只要是有品牌的企业,在饺子中配肉非常讲究,臀部和腰部的肉各多少,肥瘦怎样搭配,还要计算饺子馅中蔬菜含量,以保证口感最好
  • 经典非主流刘志太QQ头像 经典非主流刘志太QQ头像 经典非主流刘志太QQ头像 QQ头像来自红色黑客联盟.www.2cto.com QQ头像使用方法: 把鼠标放到上面的一个QQ头像图片上,点击右键,选择"图片另存为",把QQ头像保存到桌面上,然后点击QQ面板的"菜单"→"设置"→"个人设置",这时就进入QQ的"个人设置"面板,然后在QQ头像右边点"更改"→选择"本地上传"→选择你刚保存的头像→最后点"确定&qu