一、面向对象特色:封装、继承、多态。
二、构造函数 = 构造器 + 原型对象;
(1)父类
function UserClass(name,age,word){app
//构造器 constructor this.name=name; this.age =age; this.word =word; this.init =function(){ return `${this.name} ----init初始化`; }
}
UserClass.prototype={函数
//原型对象 prototype 只能实例化以后才能调取 say(){ return `${this.name}---${this.age}----${this.word}`; }
}
module.exports = UserClass;ui
var u1 = new UserClass("大雷",18,"大家这些二傻子");
打印:大家这些二傻子 -- 大雷 -- init初始化this
(2)子类
继承父类:call/apply 改变this指向来实现继承,二者参数不相同,功能相同。但没法继承原型对象。
var UserClass=require("./userClass");
function User(name,age,word,grade){prototype
this.grade=grade; //UserClass.call(this,name,age,word); UserClass.apply(this,[name,age,word]);
}code
//(1)直接赋值:能够继承原型对象
//User.prototype = new UserClass();
//(2)对象复制:能够继承原型对象
//for(var i in UserClass.prototype){
// User.prototype[i] = UserClass.prototype[i];
// }对象
User.prototype={继承
say(){ //把父类的say方法改写叫方法重载。 return `${this.name} 说:我好累`; }, walk(){ //添加属于本身的方法叫多态。 return "i am fly"; }
}
module.exports = User;ip
var u2 = new User("小明",22,"不存在的啊",100);原型链
补充知识点:
var person = {
username: "人类", say: function () { alert(this.username + "你好");
}
}
var yellowPerson = {
__proto__: person, username: "黄种人",
};
(1)Object.prototype.username = "地球人";//能够使用大写的Object来实现继承
(2)yellowPerson.constructor.prototype === Object.prototype 结果为true
注意:yellowPerson.prototype.username = "地球人"; 普通对象不能使用原型来继承
打印: yellowPerson.say();
普通函数的继承call和apply:
<script>
window.username = "lili"; var person = { username: "leson" function say(userage,hobby) { alert(this.username + "今年" + userage + "岁喜欢"+hobby); } say.call(person, 18,"篮球");//say里面的this 指向call里面的第一个参数
</script>
<script>
window.username = "lili"; var person = { username: "leson" } function say(userage,hobby) { alert(this.username + "今年"+userage+"岁喜欢"+hobby); } say.apply(person,[18,"篮球"]);//say里面的this 指向apply里面的第一个参数
</script>
构造函数:使用的时候用new关键字实例化的函数
(一、构造函数就是一个类(object) 能够有属性和方法 里面的this就指向该构造函数
二、构造函数能够经过prototype来实现继承(补充自身扩展更多内容)
三、继承的时候就会产生原型链 自身-原型-Object Object没有就是undefined Object就是原型链的末端)
this的指向问题:函数属于谁就指向谁
1 window 当函数直接调用的时候 函数名前面什么都没有的时候 say();
2 object 指向函数的全部者 btn.onclick = function(){ }
3 构造函数 new Say() this就指向构造函数
4 call/apply里面的第一个参数
三种继承方式:构造函数 使用原型普通对象 使用内部原型普通函数 使用call/apply