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对象的四个过程相关推荐

  1. Javascript 遍历对象的四种方法

    方法一: for - in 循环遍历对象自身的和继承的可枚举属性 (循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)) 方法二: 使用Object.keys()遍历 (返回一个数组,包括对 ...

  2. Javascript第五章history对象第四课

    ECMAScript参考:https://blog.csdn.net/qq_30225725/article/details/88621180 DOM参考:Javascript第五章window对象的 ...

  3. JavaScript原生对象及扩展

    来源于 https://segmentfault.com/a/1190000002634958 内置对象与原生对象 内置(Build-in)对象与原生(Naitve)对象的区别在于:前者总是在引擎初始 ...

  4. (转)javascript异步编程的四种方法

    本文转自:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html 作者:阮一峰 本文仅仅作为个人mark ...

  5. JavaScript的对象、属性与方法

    目录 一.JavaScript的预解析 二 .JavaScript的对象(面向对象编程) 1.对象:是一种数据类型.是属性和方法的集合 (1)属性:是对象的静态特征 (2)方法(函数):是对象的动态特 ...

  6. JavaScript高级程序设计第四版学习--第二十四章

    title: JavaScript高级程序设计第四版学习–第二十四章 date: 2021-5-31 10:46:01 author: Xilong88 tags: JavaScript 本章内容: ...

  7. JavaScript __ 对象小记

    JavaScript __ 对象小记 文章目录 JavaScript __ 对象小记 前言 一.对象的组成 二.JavaScript中的三种对象 1.自定义对象 三种创建对象的方法 1)字面量创建对象 ...

  8. JavaScript学习笔记(四)---闭包、递归、柯里化函数、继承、深浅拷贝、设计模式

    JavaScript学习笔记(四)---闭包.递归.柯里化函数.继承.深浅拷贝.设计模式 1. 匿名函数的使用场景 2.自运行 3.闭包 3.1前提: 3.2闭包 4.函数对象的三种定义方式 5.th ...

  9. JavaScript 复制对象与Object.assign方法无法实现深复制

    在JavaScript这门语言中,数据类型分为两大类:基本数据类型和复杂数据类型.基本数据类型包括Number.Boolean.String.Null.String.Symbol(ES6 新增),而复 ...

最新文章

  1. 2.4g 无线键鼠对码软件_富德iK8900无线键鼠套装评测:静音纤薄
  2. bitcoinj开发环境搭建
  3. MATLAB作二维傅里叶变换所需要注意和知道的东西(im2double、fft2、abs、imshow、二维傅里叶变换的物理意义)
  4. 从一段代码的汇编看计算机的工作原理
  5. python怎么对齐文件_说说在 python 中,如何对齐文本
  6. Redis消息队列发展历程
  7. jQuery DOM 节点操作
  8. java高级工程师线程_java高级工程师--------多线程并发
  9. ZOJ 3492 模拟循环链表线性查找
  10. 六度分离 HDU - 1869 (最短路径)
  11. DP动态规划【专辑@AbandonZHANG】
  12. 国内主流的大数据平台厂商有哪些?
  13. 【快速上手教程2】疯壳·开源编队无人机-硬件资源简介
  14. 罗马音平假名中文可复制_日语五十音该怎么写呢?易混淆的五十音
  15. 那些我离不开的 Sketch 插件
  16. python-重难点知识汇总
  17. 记录origin画图遇到的问题及其软件bug解决
  18. 太可怕啦!AI 一秒还原马赛克,有码变高清
  19. 运行Django项目报错解决,OSError: [WinError 123] 文件名、目录名或卷标语法不正确。
  20. 基于SpringBoot框架的HIS互联网医院门诊信息管理系统源码JAVA语言开发

热门文章

  1. React和设计良好的jQuery插件并没有什么不兼容的问题。
  2. Makedown 本地图片问题
  3. 2015.05.15,外语,学习笔记-《Word Power Made Easy》 01 “如何讨论人格特点”
  4. JQuery-让Ajax变的更简单
  5. git遇到的问题之“Please make sure you have the correct access rights and the repository exists.”...
  6. windos命令行设置网络
  7. Api文档生成工具与Api文档的传播(pdf)
  8. Jmeter(二十二)_jenkins配置gitlab插件与ant插件
  9. Windows - 通过注册表编辑器来删除多余盘符
  10. H5——while循环,for循环