function Book(id,name){
        this.id=id;
        this.name=name;
    }
    const book1=new Book(1,'三国演义'); 
    const book2=Book(2,'西游记');
    
    console.log(book1);//Book {id: 1, name: "三国演义"}
    console.log(book2);//undefined
    console.log(id)//2
    console.log(name)//西游记

在js中,使用构造函数生成一个实例必须使用关键词new
new的作用 就是生成一个新的实例,并将构造函数的作用域赋给当前实例,this指向当前构造函数,并返当前实例。如果不使用关键词new直接调用构造函数,this指向的是全局的window对象,idname属性被挂在了window上(内存泄漏)。

在声明构造函数(类)时进行优化

    function Book(id, name) {
        if (this instanceof Book) {
            this.id = id;
            this.name = name;
        }else{
            return new Book(id,name)
        }
    }
    const book1 = new Book(1, '三国演义');
    const book2 = Book(2, '西游记');

    console.log(book1); //Book {id: 1, name: "三国演义"}
    console.log(book2); //Book {id: 2, name: "西游记"}

构造函数对this赋值之前,利用instanceof检查当前的this是否为构造函数的实例。如果是,则直接复制,不是的话,则使用构造函数new返回新生成的实例。

标签: none

添加新评论