资讯专栏INFORMATION COLUMN

用js的方法实现一个new

lemanli / 1815人阅读

摘要:运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。新建对象链接对象设置指向原来指向执行一次构造函数返回对象当代码执行时,会发生以下事情一个继承自的新对象被创建。使用指定的参数调用构造函数,并将绑定到新创建的对象。

new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。new 关键字会进行如下的操作:

1.创建一个空的简单JavaScript对象(即{});
2.链接该对象(即设置该对象的构造函数)到另一个对象 ;
3.将步骤1新创建的对象作为this的上下文 ;
4.如果该函数没有返回对象,则返回this。

window.name = "iii"

function Person(){
    this.name = 3
}
Person.prototype.say = function(){
    console.log(this.name)
}
var p1 = new Person();
p1.say() //3
function _new(P){
    let o = {}; //1.新建对象
        let arg = Array.prototype.slice.call(arguments,1);
        o.__proto__ = P.prototype; //2.链接对象
       // P.prototype.constructor = P;
        P.apply(o,arg);//3.设置this指向obj(原来指向window)//执行一次构造函数
        return o;//4.返回对象
}
var p2 = _new(Person)
p2.say() //3

console.log(p2 instanceof Person ) //true
console.log(p2.construtor === p1.construtor) //true

当代码 new Foo(...) 执行时,会发生以下事情:

一个继承自 Foo.prototype 的新对象被创建。
使用指定的参数调用构造函数 Foo,并将 this 绑定到新创建的对象。new Foo 等同于 new Foo(),也就是没有指定参数列表,Foo 不带任何参数调用的情况。
由构造函数返回的对象就是 new 表达式的结果。如果构造函数没有显式返回一个对象,则使用步骤1创建的对象。(一般情况下,构造函数不返回值,但是用户可以选择主动返回对象,来覆盖正常的对象创建步骤)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/110299.html

相关文章

  • js温故而知新7(面向对象编程)——学习廖雪峰js教程

    摘要:不区分类和实例的概念,而是通过原型来实现面向对象编程。新创建的的原型链是也就是说,的原型指向函数的原型。最后,创建一个对象代码和前面章节完全一样小明继承用定义对象的另一个巨大的好处是继承更方便了。 JavaScript不区分类和实例的概念,而是通过原型(prototype)来实现面向对象编程。 原型是指当我们想要创建xiaoming这个具体的学生时,我们并没有一个Student类型可用...

    Jaden 评论0 收藏0
  • 原生 JS 实现 MVVM 框架1——观察者模式和数据监控

    摘要:在前端页面中,把用纯对象表示,负责显示,两者做到了最大化的分离把和关联起来的就是。了解了思想后,自己用原生实现一个框架。注意数据描述符和存储描述符不能同时存在,否则会报错报错数据拦截使用来实现数据拦截,从而实现数据监听。 在前端页面中,把 Model 用纯 JS 对象表示,View 负责显示,两者做到了最大化的分离 把 Model 和 View 关联起来的就是 ViewModel。Vi...

    TANKING 评论0 收藏0
  • JS语言缺陷

    摘要:语言缺陷是一门在极短时间里创造的脚本语言,它存在很多的不足,这使得在学习时无形加大了学习的难度,本文就将这些内容进行总结,以防继续掉坑。 JS语言缺陷 js是一门在极短时间里创造的脚本语言,它存在很多的不足,这使得在学习时无形加大了学习的难度,本文就将这些内容进行总结,以防继续掉坑。 1.变量提升 1.1 案例分析 先来说一下变量提升,它其实就是先用后声明,经常被拿来说明的一个例子是:...

    I_Am 评论0 收藏0
  • 现代化方式开发一个图片上传工具

    摘要:对于图片上传,大家一定不陌生。项目地址一环境搭建本项目使用目前最新的和进行开发,所以环境的搭建必不可少。在目录下新建代码内容只有行,其输入为一个图片文件,输出为一串编码。同样的方式,我们可以为也设置一个代理数组,以实现向外抛出数组的目的。 对于图片上传,大家一定不陌生。最近工作中遇到了关于图片上传的内容,借此机会认真研究了一番,遂一发不可收拾,最后琢磨了一个东西出来。在开发的过程中有不...

    beanlam 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<