一、原型的基本概念
// 什么是原型?
// 每一个对象都有他的原型对象,他可以使用自己原型对象上的所有属性和方法
<script>
let cat = {
naem: "喵喵"
}
cat.__proto__.eat = functiob(){
console.log("吃鱼")
}
cat.eat();
// 获取原型的方法:
// 1、通过对象的__proto__获取
// 2、是通过构造函数的prototype 属性拿到原型
// 3、通过类的prototype 属性
// 面试题:构造函数中的this 指向是谁?
// 指向 new 创建的对象
function Cat(name,age){
this.name = name;
this.age = age;
}
let cat = new Cat();
Cat.prototype.eat = function(){
console.log("吃鱼")
}
cat.eat();
</script>
2、原型对象有什么用?
// 扩展对象的方法,不管是原始的还是内置的,都可以通过原型的方法扩展
let date = new Date();
Date.prototype.formate= function(){
let year = this.getFullYear();
let month = this.getMonth() + 1;
let date = this.getDate();
return `$(year)年$(month)月$(date)日`
}
// 目标 :输出 2022年4月14日
console.log(date.formate())
二、类与继承
<script>
// ES6类的方法
class Cat {
constructor(name ,age){
this.name = name;
this.age = age;
}
}
Cat.prototype.eat = function(){
console.log("吃鱼")
}
let cat = new Cat("喵喵",2)
cat.eat();
</script>
3、继承
<script>
class User{
constructor(username,password){
this.username = username;
this.password = passoword;
}
login(){
console.log("登录")
}
}
class Adimin extends User{
deletePersion(){
consloe.log("删除一个人")
}
}
let admin = new Admin();
admin.login();
// ES5 继承
fucntion User(username,password){
this.username = username;
this.password = password;
this.login = function(){
console.log("登录")
}
}
function Admin(){
this.deletePerson = function(){
console.log("删除一个人")
}
}
Object.prototype.login = function(){
console.log("Object 原型上的登录方法")
}
Admin.prototype = new User();
let admin = new Admin();
admin.login(); // Object 原型上的登录方法"
let a = [1,2,3]
a.login(); // Object 原型上的登录方法"
</script>