🏻
面向过程:POP(Process - oriented programming)//把问题分解为一个个函数,依次调用
面向对象:OOP(Object Oriented Programming)//先写对象,再写对象对应功能包括:封装性,继承性,多态性
/ 对象:在js中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象
对象是由属性和方法组成:
/类:泛指一大类,把全部对象的共同属性或者方法整合一起
注意:共有属性和方法要加this使用,this.方法不加小括号,否则直接调用
1.创建类:class name {
constructor(uname) { this.uname = uname; }
sing() { console.log('我唱歌'); }
// constructor()方法用于传递参数,返回实例化对象,使用new命令即自动生成
}
2.利用类创建对象: var ldh = new name('刘德华'); console.log(ldh.uname);
类的继承:子类没有的方法调用父类的方法,就近原则
1.class Son extends Father { };
2.var son = new Son();
3.super();//调用父类的构造函数
super.say();//调用父类的普通函数
this的指向问题:
1.constructor构造函数和型函数里的this指向的是创建的实例对象
2.方法里的this指向的是谁调用了这个函数
实例成员:通过构造函数内部this添加的成员
静态成员:在构造函数本身上添加的成员,只通过构造函数访问,不能通过对象访问(undefined)
tab栏切换添加功能:
1.动态创建creatElement, 需要innerHTML赋值, 在appendChild追加到父元素
2.利用insertAdjacentHTML()直接把字符串加到父元素中
//appendChild不支持追加子元素,insertAdjacentHTML()支持追加
e.stopPropagation()阻止冒泡行为
双击行为:ondblclick
构造函数和原型:创建对象的方法,
1.var obj1 = new Object();//new方法
2.var obj2 = {};//字面量
3.function Star(uname, age) {//构造函数,不用return
this.uname = uname;
this.age = age;
this.sing = function () {
console.log('我要唱歌');
}
}
构造函数都拥有prototype属性,我们可以把不变的方法直接定义到prototype对象上,使所有对象实例可以共享这些方法
对象都拥有一个属性_proto_ 指向构造函数的prototype属性。
prototype属性和属性_proto_都有一个属性constructor。
如果我们修改了原来的原型对象,给原型对象赋值的是一个对象,则必须手动利用constructor
构造函数产生实例对象,通过prototype指向原型对象,原型对象通过prototype.constructor指回构造函数,对象实例通过_proto_指向原型对象
原型链:访问对象属性 -> Star.prototype -> Object.prototype -> null
原型对象的应用:扩展内置对象的方法
注意:数组和字符串内置对象不能给原型对象操作Array.prototype = {}, 只能是Array.prototype.xxx = function () { }
继承:构造函数 + 原型对象(组合继承)
call()1.可调用函数 2.可以修改this指向
3.借用父构造函数继承属性,Fa