一.JS的类和对象
1.用CLASS,申明一个类,类名仍然大写
2.类外面有个constructor函数,能够接管传递过去的参数,同时返回实例对象
3.constructor函数不须要加function!!!!!!!!!!!!!!!!!!!!!!
4.constructor函数只有new生成实例时,就会被调用
5.!!!!!!!!!类名后没有小括号()!!!!!!!!!!!!!!
二.对于构造函数
1.构造函数里的属性和办法称为成员,成员能够增加
2.构造函数的动态成员和实例成员
3.构造函数里能够增加一些成员,能够在构造函数自身上增加,也能够在构造函数外部的this上增加
4.肯定要实例化对象!!!!!!!!!!!!!!!!!!!!!!!!!!
三.对于prototype,--proto--
1.构造函数具备prototype,对象具备--proto—属性
2.每一个构造函数都有一个prototype属性,指向另一个对象,这个对象所有的属性和对象都会被构造函数所领有
3.个别状况下,公共的办法放在原型对象上,公共的属性放在构造函数里
之所以,s1可能拜访Way1,是因为s1存在--proto--属性指向构造函数的原型对象
留神到,Way的原型对象等于s1的对象原型
办法的查找规定:
先看s1自身有无办法,如果有就执行,没有,就去构造函数的原型对象(Way.prototype)身上去找
原型对象的constructor属性:
constructor属性指向构造函数,记录该对象援用于哪个构造函数
很多状况下,须要手动把constructor属性指回原来的构造函数
成员查找机制:
依照原型链,对象自身没有的话,找对象的--proto--,再没有,找--proto--,直到null
利用原型对象扩大内置对象办法:
四.对于this指向
1.独自的this,指向windows对象alert(this) //this-->window
2.全局函数中的this,指向window对象
function demo (){ alert(this)}// this-->window demo()
3.严格模式下,undefined
function demo ( ) { 'use strict'alert(this) //undefined}demo()
4.构造函数里的this,指向实例化对象(构造函数的原型对象的this也是一样指向)
function demo (){ //alert(this) //this-->objectthis.testStr = 'this is a test'} let a = new demo()alert(a.testStr)
5.call办法里的this
function demo () {alert(this)}demo.call('abc') //abcdemo.call(null) //this-->windowdemo.call(undefined) //this-->undefined