4 js中的new 做了什么

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <script>
        //任意函数都可以使用new关键字进行调用 通过new使得普通的函数变成了构造函数
        //一般情况下构造函数的首字母需要大写
        
        //new关键字做了四件事。
        //1-开辟了一块内存空间 创建了一个新对象
        //2-让this指向这个空对象 
        //3-调用构造函数 给对象添加属性和方法 
        //4-返回这个新对象
 
        //知识点: 在js中构造函数可以有返回值也可以没有
// =========================================================================================
        // function A(){
     //        console.log("A"); //A
     //        return "aaa";
     //    }
     //    var obj1 = new A();
     //    console.log(obj1);  //A{}
        //如果返回值是基本数据类型 js会自动忽略这个返回值,也就是跟没有写返回值一样 最终返回的还是新创建的实例对象
// ========================================================================================         
        // function B(){
        //     console.log("B");  //B
        //     return {b:"bbb"};//字面量创建对象 ===(等同于)new Object({b:"bbb"})
        // }
        // var obj2 = new B();
        // console.log(obj2);  //{b:"bbb"}
        //如果返回值是引用数据类型 则实际返回的就是这个引用数据类型(复杂数据类型),此时函数返回值即return,只跟当前写的数据类型有关,跟新创建的实例对象没有任何关系!
// =======================================================================================                
        //常规用法
        // function C(){
        //     console.log("C");   //C
        // }
        // var obj3 = new C();
        // console.log(obj3);   //C{}
            //如果没写return,这个构造函数也有返回值,返回当前创建的新对象,因为new做了这件事
            
// =======================================================================================
  // function D(){
        //     console.log("D");  //D
        //     return this;
        // }
        // var obj4 = new D();
        // console.log(obj4);   //D{}
        //如果函数的返回值是this 那么就跟没有写返回值结果是一样的,因为new是this指向当前创建的新对象,即实例
 
 
        function obj(x){
            console.log("E"); //E
                    this.x = x; 
        }
        var obj1 = new obj(10);//new做的事情是让当前普通函数转化成构造函数,使this指向当前实例
            console.log(obj1);
            
        var obj2 = obj(10);//相当于函数调用,this指向window。window上有键值X :10;
            console.log(window);
            
 
            
        
    </script>
</body>
</html>

 

posted on 2019-09-27 14:44  小胖子方法  阅读(294)  评论(0编辑  收藏  举报

导航