1 function Test (num1, num2) {
2 this.num1 = num1
3 this.num2 = num2
4 }
5 Test.prototype.add = function() {
6 return this.num1 + this.num2
7 }
8 let test = new Test(1,2)
9 console.log(Test.prototype.constructor)
10 console.log(test.__proto__ === Test.prototype)
11 console.log(Object.getPrototypeOf(test) === Test.prototype)
显式原型和隐式原型的关系:
隐式原型:__proto__ :每个对象都会有隐式原型,该属性是个对象,每个__proto__都有__proto__,当访问个对象的属性或法存
在时,它就会找下个__proto__,这就形成原型链,但它是个标准,标准规定可以通过Object.getPrototypeOf()的法来访问这
个,Object.create()法创建个新对象使现有的对象来提供新创建的对象的__proto__
显式原型:prototype :任意个函数(特殊的对象)都有个显式原型prototype,该属性就是这个对象的原型对象
test.__proto__ === Test.prototype
构造函数和原型的关系:
Test.prototype.constructor === Test
实和对象之间的关系:
确定原型和实的关系:instanceof操作符和isPrototypeof法
console.log(test instanceof Test); //true
console.log(Test.prototype.isPrototypeOf(test)); //true
讲讲ES6有哪些新特性
变声明-let 与 const:let主要是添加块级作域,const是变得修改
模版字符(``):反引号,可以使变直接和字符写在起,只需要将变${}包裹,还持多,书写代码
解构赋值:好的对数组和对象进数据读取
箭头函数:函数的快捷写法,且的this定指向的是它的上级
class:原型继承的语法糖
Promise:异步解决案
模块化import,export
函数声明和变声明存在优先级吗?
Js在执代码前,都会先进简单的编译,会将函数声明和变声明提前到当前作域顶端,同作域下,如果出现函数名和变名相同,
函数名会覆盖变名,但是当变被赋值的时候,会变成变
如以下代码,var a和function a都被提升顶端,由于函数声明会覆盖变声明,所以第个输出的的function a(){} ,由于后变a被赋值
3,所以第个输出的是变的值3
么是js的严格模式
严格模式是让js在严格的规范下运,为js的升级做准备
严格模式中变必须显示声明(var/let/const)
允许函数有相同的参数,对象有相同的属性
允许对只读属性赋值(Object.defineProperty(obj, 'a', {value: 1, writable: false})
禁this关键字指向全局对象,也就是说this能指向window顶层对象
允许使新添加的保关键字