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>

原文地址:https://www.cnblogs.com/Hale-wang/p/11597916.html

时间: 2024-11-06 21:51:12

4 js中的new 做了什么的相关文章

在Node.js中使用RabbitMQ系列二 任务队列

在上一篇文章在Node.js中使用RabbitMQ系列一 Hello world我有使用一个任务队列,不过当时的场景是将消息发送给一个消费者,本篇文章我将讨论有多个消费者的场景. 其实,任务队列最核心解决的问题是避免立即处理那些耗时的任务,也就是避免请求-响应的这种同步模式.取而代之的是我们通过调度算法,让这些耗时的任务之后再执行,也就是采用异步的模式.我们需要将一条消息封装成一个任务,并且将它添加到任务队列里面.后台会运行多个工作进程(worker process),通过调度算法,将队列里的任

js 中arguments的应用

在js中每个函数类都有一个Arguments对象实例arguments,.首先他不是一个数组,可以说算一个伪数组,但是用数组的索引形式也能获取到他的值,如 let len = arguments.length;表示函数参数的个数 arguments[0]表示第一个参数 在函数中使用它的好处就是这个函数在多处调用且参数有不是必须传递的,这样可以利用arguments来处理,解决了不需要的参数也要传递的问题 在实际应用中分装的函数中使用了一下,有不对的和需要改进的地方,还请大家多多指教,一起学习 e

JS中的循环结构、循环嵌套以及函数介绍

[循环结构的步骤]    *①声明循环变量    *②判断循环条件    *③执行循环体(while的{}中的所有代码)操作     *④更新循环变量    *     * 然后,循环执行②③④    *     *     * [JS中循环条件支持的数据类型]    * ①boolean:true 真     false   假    * ②string: 非空字符串为真       空字符串为假    * ③null/NaN/undefined:  全为假    * ④object:全为真 

关于js中的回收机制,通俗版

在前面的几篇文章中,我讲解过了js中的回收机制,但是对于当时的我来说,我自己对回收机制的这个概念也有些懵懵懂懂,现在对回收机制有了更深入的理解,所以特此发布此文给于总结,也好加深记忆. 如果你想学习闭包那么js中的回收机制是必不可少的,当然学习闭包除了需要理解js中的回收机制以外还需要了解其他的概念,我的其他文章有相关的说明,这里不做闭包的讲解. 为什么要有回收机制?why? 打个比方,我有一个内存卡,这个内存是8G的,我把文件,视频,音乐,都保存到了这个内存卡,随着我的储存的内容越来越多,这个

js中的数组对象排序

一.普通数组排序 js中用方法sort()为数组排序.sort()方法有一个可选参数,是用来确定元素顺序的函数.如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序.如: var arr = ["a", "b", "A", "B"]; arr.sort(); console.log(arr);//["A", "B", "a", "b"

js中三目运算符和&amp;&amp; || 符的个人浅见

这两天看到别人写的代码,感觉很牛逼,如下,大神请忽视 $(".lgn").on("click", function() { var a = {}; a.loginType = $(this).data("logintype"); a.loginType == wx_utils.LOGIN_TYPE.WX ? (a.username = $("#username").val(), a.password = $("#pa

JS中的柯里化(currying)

何为Curry化/柯里化? curry化来源与数学家 Haskell Curry的名字 (编程语言 Haskell也是以他的名字命名). 柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果.因此柯里化的过程是逐步传参,逐步缩小函数的适用范围,逐步求解的过程. 柯里化一个求和函数 按照分步求值,我们看一个简单的例子 var concat3Words = function (a

js中的闭包

对于没有接触过闭包的初学者来说,很难见名知义马上理解什么是闭包.所以首先我们要明确一下什么是闭包.我们先来看一下官方对于闭包的解释:所谓"闭包",指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.看了这个官方的解释,大家对于闭包理解了吗?反正当我看到这个解释的时候是一脸蒙逼,不知道这说的是些什么鬼.因为看到这个解释我很难把闭包和我平时在js中进行的一些操作联系到一起更谈不上学会应用闭包了.可以说闭包是js中的一个难点,难就难在它很

underscore.js中的节流函数debounce及trottle

函数节流   throttle and debounce的相关总结及想法 一开始函数节流的使用场景是:放止一个按钮多次点击多次触发一个功能函数,所以做了一个clearTimeout setTimeout函数 clearTimeout(cancelTimer); cancelTimer =setTimeout(function(){ switchControl.switchAciontFactory(view, conf); },300) 代码的意思就不做多说了,实际上我无意间实现了一个debou