js实例化对象new关键字

3,639 阅读1分钟

引言

javascript中new 实例化一个构造函数到底干了什么,为什么要实例化构造函数

new 做了什么事

- 1.创建一个新的对象
- 2.设置新对象的constructor属性为构造函数的名称
- 3.对象的__proto__属性指向构造函数的prototype对象
- 4.使用新对象调用函数,函数中的this被指向新实例对象
- 5.返回这个新的对象

为什么要new实例化,意义所在

在JS中是没有“类”这个概念的,而是用构造函数来作为对象模版的,比如人类(是一个对象的模板)分为男人女人(实物的共同特征)他她们都有人类的共同特性,都继承了人类的属性。意义,1.可以重复使这个实例化这个构造函数以及使用;2.实现继承

自己封装New()函数

function New(){
    //创建一个新对象
    var obj=new Object();
    //取得该方法的第一个参数(并删除第一个参数),该参数是构造函数
    var Constructor = [].shift.call(arguments);
    //对象的__proto__属性指向构造函数的prototype对象
    obj.__proto__ = Constructor.prototype;
    //使用apply,将构造函数中的this指向新对象,这样新对象就可以访问构造函数中的属性和方法
    Constructor.apply(obj,arguments);
    //返回一个对象
    return obj;
}

//应用
function test(name){
    this.name = name
}
var Test1 = New(test,'js')

//等价于
var Test2 = new test('js') 

寄语:坚持是一件幸福的事情