前言
JavaScript总结笔记篇仅是记载本人学习过程中的一些总结,为了梳理一下知识点,督促自己不断加强学习。文中有些是源自官网,有些是搜集资料,有些是个人观点,难免存在某些知识点疏漏或者是有错误的地方,如果错误之处,希望看到的小伙伴能及时提个醒,避免误导其他小伙伴,也希望我的总结能帮助到正在学或者是将要学习JavaScript的小伙伴们!大家一起努力,早日成为IT界的大神!
call、apply、继承
一、call/apply
(一)作用:改变this指向
(二)区别:传参列表不同
call:需要把实参按照形参的个数传进去apply:需要传一个arguments
function Person (name, age) {
this.name = name;
this.age = age;
}
var person = new Person( "xu", 18);
var obj = {
}
Person.call(obj, "linw", 8);
//控制台输出obj ——> name:"linw", age:8
二、继承发展史
(一)原型链继承
缺点:过多的继承了没用的属性
Grand.prototype.lastName = "xu";
function Grand () {
}
var grand = new Grand();
Father.prototype = grand;
function Father () {
}
var father = new Father();
Son.prototype = father;
function Son () {
}
var son = new Son();
(二)借用构造函数
1.不能继承借用构造函数的原型
2.每次构造函数都要多走一个函数
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
function Student(name, age, sex, grade) {
//var this = Object.create(Student.prototype);
Person.call(this, name, age, sex);
this.grade = grade;
}
var student = new Student();
(三)共享原型
缺点:不能随便改动自己的原型
Father.prototype.name = "lw";
function Father() {
}
function Son() {
}
function inherit(Target, Origin) {
Target.prototype = Origin.prototype;
}
inherit(Son, Father);
var father = new Father();
var son = new Son();
(四)圣杯模式 很重要
//圣杯模式
function inherit(target,origin){
function F(){};
F.prototype = origin.prototype;
target.prototype = new F();
target.prototype.constructor = target;
//原型上都有一个属性(constructor),指向他的构造函数
target.prototype.uber = origin.prototype
}//看origin究竟继承自谁,super是关键字,用
uber代替,表示超类
Father.prototype.lastName = 'xu';
function Father(){};
function Son(){};
inherit(son,father);
var father = new Father();
var son = new Son();