一.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-->object
this.testStr = 'this is a test'
}
let a = new demo()
alert(a.testStr)
5.call 办法里的 this
function demo () {alert(this)
}
demo.call('abc') //abc
demo.call(null) //this-->window
demo.call(undefined) //this-->undefined