Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

第二十五题:new操作符都做了什么事情? #25

Open
Ray-56 opened this issue Sep 11, 2019 · 2 comments
Open

第二十五题:new操作符都做了什么事情? #25

Ray-56 opened this issue Sep 11, 2019 · 2 comments
Labels
JavaScript 解释型编程语言

Comments

@Ray-56
Copy link
Owner

Ray-56 commented Sep 11, 2019

new操作符都做了什么事情?实现一个相同功能的方法

@Ray-56 Ray-56 added the JavaScript 解释型编程语言 label Sep 11, 2019
@lamelamb
Copy link

new 可以视为语言上的语法糖,
1。不用手动新建一个obj ,new会帮你创建

2。不用把新建的obj的__proto__指向构造函数Common的prototype,new会帮你做。

3。构造函数this的作用域会指向实例本身。

4。不用手动return新建的obj,new会帮你return。

5。new出来的实例的__proto__会指向构造函数的prototype。构造函数的方法,实例可以直接调用

@MMmaXingXing
Copy link

介绍

new操作符可以快速创建构造函数的实例,以下

    function Person(name, age, job) {
        this.name = name;
        this.age = age;
        this.job = job;
    }

    Person.prototype.sayHello = () {
        alert("hello");
    }

    let man = new Person('zucker', 18, 'job')
    console.log(man);
    man.sayHello();

以上 经历了四个步骤,

1、内部创建一个新对象
2、将构造函数的作用域赋值给新对象,(设置原型链,因此this就指向了这个新对象)
3、执行构造函数中的代码
4、返回新对象

实现一个new对象

function New(obj, ...arr) {
    len ans = {};
    ans.__proto__ = obj.prototype; // 连接原型对象
    // Object.setPrototypeOf(ans, obj.prototype)

    // let ans = Object.create(obj.prototype);

    let result = obj.apply(ans, arr); //获得构造函数的返回值
    return ans === Object ? ans : result;
    // 判断构造函数的返回值是否与创造的实例不同 
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
JavaScript 解释型编程语言
Projects
None yet
Development

No branches or pull requests

3 participants