网络日志

JavaScript中比较抽象的东西(自己用)

一.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-->window2.全局函数中的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