js中new一个对象的过程
使用new关键字调用函数(new ClassA(…))的具体步骤:
1. 创建空对象{}
2. 使用新对象,调用函数,函数中的this被指向新实例对象:
{}.构造函数();
3. 设置新对象的constructor属性为构造函数的名称,设置新对象的__proto__属性指向构造函数的prototype对象
4. 将初始化完毕的新对象地址,保存到等号左边的变量中
注意:若构造函数中没有返回值或返回值是基本类型(Number、String、Boolean)的值,则返回新实例对象;若返回值是引用类型的值,则实际返回值为这个引用类型。
var foo = "bar"; function test () { this.foo = "foo"; } new test(); //test中的this指新对象,并未改变全局的foo属性 console.log(this.foo); // "bar" console.log(new testThis().foo); // "foo";new和属性访问.运算符优先级相通,从左往右执行
以上皆为个人理解,如有错误之处,欢迎留言指正。
希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!
相关推荐
-
JavaScript中使用构造器创建对象无需new的情况说明
如下 复制代码 代码如下: function Person(name, age) { this.name = name; this.age = age; } var p = new Person('lily', 20); 发现某些库代码中创建正则对象的方式无需new,这让人感到奇怪.如下 复制代码 代码如下: var reg = RegExp('^he$'); 测试发现使用或不使用new,最后返回的都是正则对象,且typeof它们都是"object". 复制代码 代码如下: var r
-
javascript new一个对象的实质
以前这些东西自己清楚,可是却解释不出来,也没有去深究这些东西.今天在看<悟透JavaScript>的时候,看到作者的描述,"茅厕"顿开. 现摘录如下,作者说的很是清楚: 用 var anObject = new aFunction() 形式创建对象的过程实际上可以分为三步: 第一步是建立一个新对象: 第二步将该对象内置的原型对象设置为构造函数prototype引用的那个原型对象: 第三步就是将该对象作为this参数调用构造函数,完成成员设置等初始化工作.
-
javascript中使用new与不使用实例化对象的区别
我们先来看个实例 function Me(name,age,job){ this.name = name; this.age = age; this.job = job; } 请问这以下两种实例化对象方式有什么区别呢? var mefun1 = new Me('fei','20','it'); var mefun2 = Me('fei','20','it'); 简单的说 第一种是构造函数式,即通过new运算符调用构造函数Function来创建函数 第二种不是实例化,只是调用函数把返回值赋给变量.
-
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
IE中new Date(strDate)返回无效时间解决方式: 方法一: function getDateForStringDate(strDate){ //切割年月日与时分秒称为数组 var s = strDate.split(" "); var s1 = s[0].split("-"); var s2 = s[1].split(":"); if(s2.length==2){ s2.push("00"); } return
-
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
JavaScript中的对象模型(object model)并不广为人知.我曾写过一篇关于他们的博客.之所以不被人所熟知,原因之一就是JavaScript是这些被人广泛使用的语言中唯一一个通过原型(prototype)来实现继承的.但是,我认为另一个原因就是这种对象模型非常复杂,难于解释.它为什么这么复杂并且又令人困惑呢?那是因为JavaScript试图去隐藏它传统的面向对象的特性--最终导致了它的双重人格(译者注:作者意思是JavaScript既有面向过程的特征,又有面向对象的特征). 我认为
-
js中new一个对象的过程
使用new关键字调用函数(new ClassA(-))的具体步骤: 1. 创建空对象{} 2. 使用新对象,调用函数,函数中的this被指向新实例对象: {}.构造函数(); 3. 设置新对象的constructor属性为构造函数的名称,设置新对象的__proto__属性指向构造函数的prototype对象 4. 将初始化完毕的新对象地址,保存到等号左边的变量中 注意:若构造函数中没有返回值或返回值是基本类型(Number.String.Boolean)的值,
-
js中document.write使用过程中的一点疑问解答
本人是新手,所以就记录下来了.这个答案是在百度中看到的,所以算是转载. 下面的内容解答了何为如果在页面加载完后如果调用document.write就会覆盖整个文档. 提示中的 [HTML 输出中] 指的是当页面加载的时候. 复制代码 代码如下: <html> <head></head> <body> <script type="text/javascript">document.write("<p>Hel
-
js中关于Blob对象的介绍与使用
blob对象介绍 一个 Blob对象表示一个不可变的, 原始数据的类似文件对象.Blob表示的数据不一定是一个JavaScript原生格式 blob对象本质上是js中的一个对象,里面可以储存大量的二进制编码格式的数据. 创建blob对象 创建blob对象本质上和创建一个其他对象的方式是一样的,都是使用Blob() 的构造函数来进行创建. 构造函数接受两个参数: 第一个参数为一个数据序列,可以是任意格式的值. 第二个参数是一个包含两个属性的对象{ type: MIME的类型, endings: 决
-
js中如何复制一个对象并获取其所有属性和属性对应的值
在js中如何复制一个对象,例如如下一个js对象. 如果知道这个对象的所有属性自然就可以重新new一个,然后对每个属性赋值,就可以做到,但如果不知道呢?如何创建一个内容相同 的对象呢? 复制代码 代码如下: var obj={ colkey: "col", colsinfo: "NameList" } 最简单就是使用for in, 例如obj2就拥有了和obj完全相同的属性 复制代码 代码如下: var obj2=new Object(); for(var p in
-
Java开发中解决Js的跨域问题过程解析
这篇文章主要介绍了Java开发中解决Js的跨域问题过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 主流方法有JSONP和CORS两种,这里记一下后者的方式,理论基础就是在请求的时候在http请求头中添加如下属性: //指定允许其他域名访问 Access-Control-Allow-Origin:http://localhost:8989 如果后端用Java开发,在返回请求中可以添加如下属性 1.在跨域问题中,如果不操作cookie,只需
-
安装node.js以及搭建vue项目过程中遇到的问题详解
目录 一.node.js安装 二.如何找node.js历史版本 1.点击DOWNLOADS 2.点击页面下方 3.翻页找到历史版本 三.检查是否安装成功? 四.安装成功后需要配置环境变量: 五.环境搭建 六.项目创建 总结 一.node.js安装 进入官网 https://nodejs.org/en/download/ 直接点击下载安装!安装过程直接下一步就行: 二.如何找node.js历史版本 (https://nodejs.org/en/download/) 1.点击DOWNLOADS 2.
-
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
在JS中,你写一个for循环的时候,内部的循环变量I其实是会保存在它运行的函数或类内的,所以你会发现你给元素批量绑定事件的时候,出现i=最后一个循环变量的值,这就很坑爹啊,解决的方案有2钟, 思路就是:把这个循环变量保存起来,不要让它的作用域在整个函数,而是在循环体内 1.使用闭包(如果你不懂闭包,请打开百度:www.baidu.com) 2.使用with关键字,with语法是with( obj ) { //使得可以在此直接访问obj的属性,而不用加obj.XXX } 代码示例: 复制代码 代码
-
js中区分深拷贝与浅拷贝的实战过程
目录 一.自我理解 二.数据存储形式 (1)基本数据类型存储于栈中 (2)引用数据类型存储与堆中 三.怎样实现深拷贝? (1)借助JSON对象的parse和stringify (2)手写递归 (3)JQuery中extend方法 总结/注意 总结 一.自我理解 简单来讲就是:深拷贝层层拷贝,浅拷贝只拷贝第一层. 在深拷贝中,新对象中的更改不会影响原对象,而在浅拷贝中,新对象中的更改,原对象中也会跟着改. 在深拷贝中,原对象与新对象不共享相同的属性,而在浅拷贝中,它们具有相同的属性. 举个栗子:存
-
js中继承的几种用法总结(apply,call,prototype)
一,js中对象继承 js中有三种继承方式 1.js原型(prototype)实现继承 复制代码 代码如下: <SPAN style="BACKGROUND-COLOR: #ffffff"><SPAN style="FONT-SIZE: 18px"><html> <body> <script type="text/javascript"> function Person(na
-
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
前言 最近在做一个项目改版,第一次在项目中真正使用Angular,和平时自己写写小demo,做做练习的感觉还是非常不同的,感觉非常的新鲜.有几个指令是经常用到的,这里由于这几个有点共性,所以一起介绍一下ng-if,ng-show/ng-hide,ng-switch 这几个指令.下面来看看详细的介绍: 共性 1.这里个指令都是Angular框架提供给我们的设置页面内容显示和隐藏的方法,使用起来非常方便,尤其是做业务逻辑. 2.都是通过一个表达式的值来实现切换显示的,只不过 ng-switch 可以
随机推荐
- Go语言使用组合的方式实现多继承的方法
- Angularjs中的ui-bootstrap的使用教程
- Swift算法实现逐字翻转字符串的方法示例
- VC6.0常用快捷键大全
- node-webkit打包成exe文件被360误报木马的解决方法
- jQuery中find()方法用法实例
- 还原磁盘配额时,请先关闭“拒绝将磁盘空间给超过配额限制的用户”
- Java编程中10个最佳的异常处理技巧
- 轻松实现jquery选项卡切换效果
- php对外发包引发服务器崩溃的终极解决方法分享[推荐]
- C语言求向量和的两则问题解答分享
- Android高效加载大图、多图解决方案 有效避免程序OOM
- 五步掌握OOM框架AutoMapper基本使用
- java 读取网页内容的实例详解
- 利用Hyperic调用Python实现进程守护
- 使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
- Vue配置marked链接添加target="_blank"的方法
- 带你深入概括Java!六、方法和方法重载!(推荐)
- opencv实现矩形检测
- ubuntu16.04 升级内核的方法步骤