最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • javascript——new

    正文概述 掘金(从零开始的程序媛)   2021-02-04   378

    创建对象的方式(3种)

    1.字面量

    let obj = {
    	name:'Tom',
        age:12
    }
    

    2.new

    function People(name,age){
        this.name = name;
        this.age = age;
        console.log("name:"+name+",age:"+age);
    }
    
    let tom = new People('Tom',12);//name:Tom,age:12
    

    new中主要做了三件事:

    1. 返回一个新的对象。
    2. 把构造函数的this指向这个新的对象
    3. 把新对象的__proto__指向构造函数的prototype

    当构造函数没有返回值或者返回值是基础数据类型的时候,使用new的时候会返回一个实例对象。而当构造函数的返回值是Object、Array、Function等引用类型的时候,使用new会返回这个引用类型。

    根据以上信息就可以实现一个手写的new

    //context 表示要使用的构造函数 arguments是传入的参数
    function myNew(context){
        let obj = {};//新建一个对象
        obj.__proto__ = context.prototype;//把实例对象的原型指向构造函数的原型对象
        let result = context.apply(obj,[].slice.call(arguments,1));//绑定this  传入参数
        return result instanceof Object ? result : obj;
    
    }
    
    function People(name,age){
        this.name = name;
        this.age = age;
        console.log("name:"+name+",age:"+age);
    }
    
    let Jim = myNew(People,'Jim',12);
    console.log(Jim);
    

    3.Object.create()

    Object.create()方法创建一个新对象,使用现有的对象来作为新创建的对象的__proto__

    let woman = {
        sex:'女',
        work:'IT'
    }
    let lili = Object.create(woman);
    lili.name = 'lili';//增加属性
    lili.age = 12;
    console.log(lili);
    

    javascript——new

    三种的区别

    字面量创建和new关键字创建并没有区别,创建的新对象的__proto__都指向Object.prototype,都会继承 Object 的属性和方法。只是字面量创建更高效一些,少了__proto__指向赋值和this。

    而通过 Object.create(null) 创建的对象,其原型指向 null , null 作为原型链的顶端,没有也不会继承任何属性和方法。


    起源地下载网 » javascript——new

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元