共计 1974 个字符,预计需要花费 5 分钟才能阅读完成。
1、面向对象特点:封装、继承、多态。
2、构造函数 = 构造器 + 原型对象;
(1)父类
function UserClass(name,age,word){
// 构造器 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;
var u1 = new UserClass(“ 大雷 ”,18,” 你们这些二傻子 ”);
打印:你们这些二傻子 — 大雷 — init 初始化
(2)子类
继承父类:call/apply 改变 this 指向来实现继承,两者参数不相同,功能相同。但无法继承原型对象。
var UserClass=require(“./userClass”);
function User(name,age,word,grade){
this.grade=grade;
//UserClass.call(this,name,age,word);
UserClass.apply(this,[name,age,word]);
}
//(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;
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 关键字实例化的函数
(1、构造函数就是一个类(object)可以有属性和方法 里面的 this 就指向该构造函数
2、构造函数可以通过 prototype 来实现继承(补充自身扩展更多内容)
3、继承的时候就会产生原型链 自身 - 原型 -Object Object 没有就是 undefined Object 就是原型链的末端)
this 的指向问题: 函数属于谁就指向谁
1 window 当函数直接调用的时候 函数名前面什么都没有的时候 say();
2 object 指向函数的所有者 btn.onclick = function(){}
3 构造函数 new Say() this 就指向构造函数
4 call/apply 里面的第一个参数
三种继承方式:
构造函数 使用原型
普通对象 使用内部原型
普通函数 使用 call/apply