JavaScript new对象的四个过程
new 一个对象
function Person(name, age) { this.name = name; this.age = age;
}
var person = new Person("hellen", 23);
1、创建一个空对象
var obj = new Object();
2、让Person中的this指向obj,并执行Person的函数体
var result = Person.apply(obj,arguments);
3、设置原型链,将obj的__proto__成员指向了Person函数对象的prototype成员对象
obj.__proto__ = Person.prototype;
4、判断Person的返回值类型,如果是值类型,返回obj。如果是引用类型,就返回这个引用类型的对象。
if (typeof(result) == "object") person = result;
elseperson = obj;
function Person (name, age) {this.name = name;this.age = age;
}
Person.prototype.sayName = function () {console.log(this.name);
};
var person = new Person('Hellen', 23);
person.sayName();
console.log(person instanceof Person);function New () {let obj = new Object();let fn = [].shift.call(arguments);let args = arguments;var ret = fn.apply(obj, args);obj.__proto__ = fn.prototype;return typeof ret === 'object' ? ret : obj;
}
let person1 = New(Person, 'Bob', 23);
person1.sayName();
console.log(person1 instanceof Person);
转载于:https://www.cnblogs.com/xiaosongJiang/p/11005193.html
JavaScript new对象的四个过程相关推荐
- Javascript 遍历对象的四种方法
方法一: for - in 循环遍历对象自身的和继承的可枚举属性 (循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)) 方法二: 使用Object.keys()遍历 (返回一个数组,包括对 ...
- Javascript第五章history对象第四课
ECMAScript参考:https://blog.csdn.net/qq_30225725/article/details/88621180 DOM参考:Javascript第五章window对象的 ...
- JavaScript原生对象及扩展
来源于 https://segmentfault.com/a/1190000002634958 内置对象与原生对象 内置(Build-in)对象与原生(Naitve)对象的区别在于:前者总是在引擎初始 ...
- (转)javascript异步编程的四种方法
本文转自:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html 作者:阮一峰 本文仅仅作为个人mark ...
- JavaScript的对象、属性与方法
目录 一.JavaScript的预解析 二 .JavaScript的对象(面向对象编程) 1.对象:是一种数据类型.是属性和方法的集合 (1)属性:是对象的静态特征 (2)方法(函数):是对象的动态特 ...
- JavaScript高级程序设计第四版学习--第二十四章
title: JavaScript高级程序设计第四版学习–第二十四章 date: 2021-5-31 10:46:01 author: Xilong88 tags: JavaScript 本章内容: ...
- JavaScript __ 对象小记
JavaScript __ 对象小记 文章目录 JavaScript __ 对象小记 前言 一.对象的组成 二.JavaScript中的三种对象 1.自定义对象 三种创建对象的方法 1)字面量创建对象 ...
- JavaScript学习笔记(四)---闭包、递归、柯里化函数、继承、深浅拷贝、设计模式
JavaScript学习笔记(四)---闭包.递归.柯里化函数.继承.深浅拷贝.设计模式 1. 匿名函数的使用场景 2.自运行 3.闭包 3.1前提: 3.2闭包 4.函数对象的三种定义方式 5.th ...
- JavaScript 复制对象与Object.assign方法无法实现深复制
在JavaScript这门语言中,数据类型分为两大类:基本数据类型和复杂数据类型.基本数据类型包括Number.Boolean.String.Null.String.Symbol(ES6 新增),而复 ...
最新文章
- 2.4g 无线键鼠对码软件_富德iK8900无线键鼠套装评测:静音纤薄
- bitcoinj开发环境搭建
- MATLAB作二维傅里叶变换所需要注意和知道的东西(im2double、fft2、abs、imshow、二维傅里叶变换的物理意义)
- 从一段代码的汇编看计算机的工作原理
- python怎么对齐文件_说说在 python 中,如何对齐文本
- Redis消息队列发展历程
- jQuery DOM 节点操作
- java高级工程师线程_java高级工程师--------多线程并发
- ZOJ 3492 模拟循环链表线性查找
- 六度分离 HDU - 1869 (最短路径)
- DP动态规划【专辑@AbandonZHANG】
- 国内主流的大数据平台厂商有哪些?
- 【快速上手教程2】疯壳·开源编队无人机-硬件资源简介
- 罗马音平假名中文可复制_日语五十音该怎么写呢?易混淆的五十音
- 那些我离不开的 Sketch 插件
- python-重难点知识汇总
- 记录origin画图遇到的问题及其软件bug解决
- 太可怕啦!AI 一秒还原马赛克,有码变高清
- 运行Django项目报错解决,OSError: [WinError 123] 文件名、目录名或卷标语法不正确。
- 基于SpringBoot框架的HIS互联网医院门诊信息管理系统源码JAVA语言开发
热门文章
- React和设计良好的jQuery插件并没有什么不兼容的问题。
- Makedown 本地图片问题
- 2015.05.15,外语,学习笔记-《Word Power Made Easy》 01 “如何讨论人格特点”
- JQuery-让Ajax变的更简单
- git遇到的问题之“Please make sure you have the correct access rights and the repository exists.”...
- windos命令行设置网络
- Api文档生成工具与Api文档的传播(pdf)
- Jmeter(二十二)_jenkins配置gitlab插件与ant插件
- Windows - 通过注册表编辑器来删除多余盘符
- H5——while循环,for循环