机械加工网站有哪些,运城市住房和城乡建设厅网站,企业建设网站注意事项,苗木网站模板原文
构造函数 没有显式的创建对象创建对象时使用new操作符。所有属性和方法赋值给this对象。没有return语句按照惯例#xff0c;构造函数的方法名首字母应该使用大写字母#xff0c;用于区分普通函数#xff0c;其实构造函数也是函数#xff0c;其主要功能是用来创建对象…原文
构造函数 没有显式的创建对象创建对象时使用new操作符。所有属性和方法赋值给this对象。没有return语句按照惯例构造函数的方法名首字母应该使用大写字母用于区分普通函数其实构造函数也是函数其主要功能是用来创建对象。每个构造函数都有一个原型属性prototype该属性指向一个该构造函数的原型对象原型对象中有一个constructor属性该属性指向改构造函数实例对象中包含一个指针[[Prototype]]指向构造函数的原型对象浏览器厂商给每个实例属性都加上了一个__**proto__**属性用于获取构造函数的原型对象使用构造函数的缺点就是每个方法都要在实例上重新创建一遍如果我们根据Person构造函数创建两个实例person1和person2都有一个sayName()的方法但这两个方法是不同的Function的实例因为Function也是对象因此每定义一个函数就会创建一个对象。 解决方式将共享属性和方法放到原型对象上。每个构造函数都有一个原型属性prototype该属性指向一个包含该类型所有实例共享属性和方法的对象即原型对象。 类 类本身也指向构造函数类似于一个语法糖让对象原型更清晰更加面向对象编程类里面有一个constructor方法即构造方法this关键字代表实例对象。也就是说ES5的构造函数Point,对应ES6的Point的构造方法。使用的时候直接对类使用new命令跟构造函数的用法完全一致并且类必须用new调用否则会报错类的所有方法都是定义在类的prototype属性上面。在类的实例上面调用方法其实就是调用原型上面方法prototype对象上面的constructor属性直接指向‘类’本身这与ES5的行为一致。类内部的方法都是不可枚举的。类里面必须有一个constructor方法如果没有显示指定将自动添加一个空的constructor方法通过new命令生成对象实例时自动调用该方法默认返回实例对象this。实例属性除非显式定义在本身即定义在this对象上否则都定义在原型上所有实例共享原型对象。可以使用get和set关键字对某个属性设置存值函数与取值函数拦截该属性的存取行为。类和模块内部默认是严格模式不需要使用use strict指定运行模式。类不存在变量提升。类方法内部如果含有this它默认指向类的实例。静态方法类相当于实例的原型类中定义的方法都会被实例继承如果在一个方法前加上static关键字表示该方法不会被实例继承而是通过类来调用这就称为‘静态方法’。如果静态方法中包含this关键字这个this指的是类而不是实例。实例属性除了可以定义在constructor方法里面的this上面还可定义在类的最顶层私有属性和私有方法在属性和方法前面加上#就表示私有属性或者方法在内部调用时要加上#继承ES6中Class可以通过extends关键字实现继承比ES5的通过原型链实现继承清晰和方便的多。子类必须在constructor方法中调用super方法否则新建实例时会报错。这是因为子类自己的this对象必须先通过父类的构造函数完成塑造得到与父类同样的实例属性和方法然后再对其进行加工加上子类自己的实例属性和方法。如果不调用super方法子类就得不到this对象。在子类的构造函数中只有调用super之后才可以使用this关键字否则会报错这是因为子类实例的构建是基于父类实例的只有super方法才能调用父类实例。ES5的继承实质上先创建子类的实例对象this然后再将父类的方法添加到this上面parent.apply(this))。ES6的继承机制完全不同实质是先将父类实例对象的属性和方法加到this上面所以必须先调用super方法然后再用子类的构造函数修改this。Object.getPrototypeOf方法可以用来从子类上获取父类可以使用这个方法判断一个类是否继承了另一个类大多数浏览器的 ES5 实现之中每一个对象都有proto属性指向对应的构造函数的prototype属性。Class 作为构造函数的语法糖同时有prototype属性和proto属性因此同时存在两条继承链。 1子类的proto属性表示构造函数的继承总是指向父类。 2子类prototype属性的proto属性表示方法的继承总是指向父类的prototype属性。类声明不会提升