首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

理解js中的new

new 操作符 在有上面的基础概念的介绍之后,在加上new操作符,我们就能完成传统面向对象的class + new的方式创建对象,在Javascript中,我们将这类方式成为Pseudoclassical...基于上面的例子,我们执行如下代码 var obj = new Base(); 这样代码的结果是什么,我们在Javascript引擎中看到的对象模型是: ? new操作符具体干了什么呢?...__proto__ = Base.prototype; Base.call(obj); 第一行,我们创建了一个空对象obj 第二行,我们将这个空对象的__proto__成员指向了Base函数对象prototype...例如代码如下: Base.prototype.toString = function() {     return this.id; } 那么当我们使用new创建一个新对象的时候,根据__proto...于是通过函数对象和Javascript特有的__proto__与prototype成员及new操作符,模拟出类和类实例化的效果。

3.3K40

js new Date() 默认是8点

然后我通过new Date()传入日期字符串创建了一个对象,并与当前时间做时间戳比较,结果12点刚过,就出问题了。...举个栗子 // 假设当前时间是2019年12月22日0点20分 new Date('2019-12-22').getTime() < new Date().getTime() // 上面的结果是什么?...当时临时解决问题后的字符串大概长这样: new Date('2019/12/22 00:00:00').getTime() < new Date().getTime() 临时解决问题。...那么为什么js会对不同分割的时间字符串进行不同处理呢?貌似是因为-分隔且具有前导0的日期字符串,会被解析成ISO格式的字符串,以GMT时区为基准,不过我也没看懂。...@param dateStr * 时间字符串 */ function getDate(dateStr){ /* 若日期是使用-分割的,全部转换成/ 因为只有日期时,js

8.7K30

模拟实现 new 操作符(js)

js 不是基于 class 这种静态类模式,而是基于原型对象的模式。 所以,在 js 中,new 操作符,其实可以通俗的理解成一个辅助工具,用来辅助函数构造出一个新对象。...得先明确这点,才能知道,的确是可以模拟 new 操作符的。...套用 MDN 对 new 的说明: new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。...没错,从引擎角度来看,的确是这样处理,但这些内部属性我们并没有办法看到的啊,那对于我们这些写 js 的来说,如何判断一个函数是否能够作为构造函数呢?靠经验积累?...__proto__ = f.prototype // 既不会让被检测函数先行执行一遍,又可以达到利用引擎层面检测函数是否能作为构造函数的目的 总结 最终,模拟 new 的实现代码: function _

3.5K10

帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)

前言   作为一名前端工程师,必须搞懂JS中的prototype、__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞懂它们...让我们从如下一个简单的例子展开讨论,并配以相关的图帮助理解: function Foo() { ...}; let f1 = new Foo(); 以上代码表示创建一个构造函数Foo(),并用new...但是由于JS中函数也是一种对象,所以函数也拥有__proto__和constructor属性,这点是致使我们产生困惑的很大原因之一。...每个函数在创建的时候,JS会同时创建一个该函数对应的prototype对象,而函数创建的对象....本文就此结束了,希望对那些对JS中的prototype、__proto__与constructor属性有困惑的同学有所帮助。

63420

JS面向对象二:this原型链new原理

JS面向对象二:this/原型链/new原理 阮一峰JavaScript教程:面向对象编程 阮一峰JavaScript教程:实例对象与 new 命令 阮一峰JavaScript教程:this 关键字 也可以看看这篇文章周大侠啊...但是由于回调函数的调用者往往不是我们自己,而是回调函数的接收者,即某个库或框架、甚至是JS运行时环境。...- 方应杭的文章 - 知 周大侠啊 进击的 JavaScript 之 (七) 原型链 周大侠啊 进击的 JavaScript (八) 之 继承 new() 看看这篇文章很清楚: JSnew 到底是干什么的...- 方应杭的文章 - 知乎 new解决了什么 以共有属性对象为模板new出来的新对象的__proto__指向共有属性对象(我把这个对象叫做模板对象,也叫作原型).这样共有属性在内存中只需要存一次!...function New(proto){ //proto 为传进来的构造函数 var obj = {}; obj.

2K30

彻底深刻理解js原型链之prototype,proto以及constructor(二)

这篇教程主要目的对原型链概念进一步加深理解 巩固下教程一的知识 来看下面的例子: var text=new String("我是文字"); function Persion(name,job){     ...} Persion.myName="lxm"; Persion.prototype.sayName=function(){     alert(this.name); } var perison1=new...通过图我们可以简单理解,拥有原型对象属性的对象是函数对象,否则为普通对象 原型链是有开始和尽头的,开始于null,结束于普通对象 所有的函数对象都是Function以new的方式创造出来了,包括Function...__proto__===Persion.prototype; 首先判断perison1是通过new方式被Persion创造出来的,依据九句真言第4条得出 :true perison1.name===Persion.name...__proto__===Object.prototype; 只看图可以看到perison1没有prototype,是普通对象所以答案为:js报错~~ Persion.prototype.

70810
领券