zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    Java自学-多线程 常见线程方法
    Java自学-多线程 启动一个线程
    Java自学-Lambda 聚合操作
    Java自学-Lambda 方法引用
    Java自学-Lambda 概念
    Java自学-泛型 泛型转型
    Java自学-泛型 通配符
    Java自学-泛型 支持泛型的类
    <VCC笔记> 关于Assertion
    <VCC笔记>VCC简介与安装
  • 原文地址:https://www.cnblogs.com/Hale-wang/p/11597916.html
Copyright © 2011-2022 走看看