JavaScript新建实例不需要带 new 的小技巧

贾华
• 阅读 878

让我们可以不加 new 地新建实例.

首先, 需要使用function而不是class.

function Fish() {
    console.log(this instanceof Fish)
}

测试一下

Fish()
>> false
<- undefined

new Fish()
>> true
<- Fish {}

所以, 可以这样

function Dog() {
    if (!(this instanceof Dog)) {
        return new Dog()
    }
    return this
}

试试

Dog()
<- Dog {}

new Dog()
<- Dog {}

耶✌️

点赞
收藏
评论区
推荐文章
Karen110 Karen110
4年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
半臻 半臻
4年前
Python基础7——单例模式
15单例模式15.1init和new方法执行步骤1.实例化一个对象,先执行new方法,在new方法中返回对象2.然后再调用init方法15.1.1\\init\\方法init是构造方法<fontcolor"red"其实最先调用的方法是new方法</font,但是大部分情况下是不使用new方法pythonclassTest(object):
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
sql:mysql:函数:TIMESTAMPDIFF函数实现TimeStamp字段相减,求得时间差
<divclass"htmledit\_views"id"content\_views"<p&nbsp;函数内指定是minute,则最终结果value值的单位是分钟,如果函数内指定为hours,则最终结果value值单位为小时。</p<preclass"has"name"code"<codeclass"hljssql"<
Jacquelyn38 Jacquelyn38
4年前
一篇文章带你使用Typescript封装一个Vue组件
搭建项目以及初始化配置vue create tsvuebtn这里使用了vueCLI3自定义选择的服务,我选择了ts、stylus等工具。然后创建完项目之后,进入项目。使用快捷命令code.进入Vscode编辑器(如果没有code.,需要将编辑器的「bin文件目录地址」放到环境变量的path中)。然后,我进入编辑器之后,进入设置工作区,随便设置一个
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Souleigh ✨ Souleigh ✨
4年前
安利几个JS开发小技巧
开发小技巧<br/1、转换布尔值除了常规的布尔值true和false之外,JavaScript还将所有其他值视为truthy或falsy。除非另有定义,否则JavaScript中的所有值都是truthy,除了0,“”,null,undefined,NaN,当然还有false,这些都是falsy我们可以通过使用负算运算符轻松地
Wesley13 Wesley13
3年前
35岁,真的是程序员的一道坎吗?
“程序员35岁是道坎”,“程序员35岁被裁”……这些话咱们可能都听腻了,但每当触及还是会感到丝丝焦虑,毕竟每个人都会到35岁。而国内互联网环境确实对35岁以上的程序员不太友好:薪资要得高,却不如年轻人加班猛;虽说经验丰富,但大部分公司并不需要太资深的程序员。但35岁危机并不是不可避免的,比如你可以不断精进技术,将来做技术管理或者
Stella981 Stella981
3年前
ReentrantLock源码——获取公平锁、非公平锁、释放锁
一般用ReentrantLock的方式如下://新建非公平锁实例LocklocknewReentrantLock();//新建非公平锁实例//LocklocknewReentrantLock(true);//加锁lock.lock();try{
Stella981 Stella981
3年前
Python类中的__new__和__init__的区别
在写Python类时,或者看某些项目源码时,总是见到__init__和__new__方法,一直没有深入研究两者的区别,今天聊聊这个。__new____new__是类(class)方法。class新创建实例时,会调用__new__,它主要控制一个新实例的创建。需要知道的是,__new__是实例创建的第
Stella981 Stella981
3年前
JSP内置九个对象Request请求对象
jsp内置对象是什么呢?例如Java语言使用一个对象之前需要实例化(也就是所说的new一个对象),创建对象这个过程有点麻烦,所以在jsp中提供了一些内置对象,用来实现很多jsp应用。在使用内置对象时,不需要实例化这些对象,直接使用就行了。预先定义了九个这样的对象。下面分别对这九个预先定于的对象进行分析和讲解。1.Request请求对象