每一个对象都有它的原型对象,它可以使用自己原型对象上的所有属性和方法。 获取原型的方法:
- 通过对象的__proto__获取
- 通过构造函数的prototype属性拿到原型
- 通过类的prototype属性
- 通过对象的__proto__获取
let cat = {
name: '喵喵'
}
cat.__proto__.eat = function () {
console.log('吃鱼')
}
cat.eat()
- 通过构造函数的prototype属性拿到原型
function Cat(name, age) {
this.name = name
this.age = age
}
let cat = new Cat('喵喵', 2)
Cat.prototype.eat = function () {
console.log('吃鱼')
}
cat.eat()
- 通过类的prototype属性
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()
原型对象有什么用?
通过扩展对象来实现输出xxxx年xx月xx日
let date = new Date()
Date()本身不具有输出年月日的能力
Date.prototype.format = function () {
let year = this.getFullYear()
let month = this.getMonth()
let date = this.getDate()
return `${year}年${month}月${date}日`
}
date.format()
什么是继承? 继承就是子对象可以使用父对象上的所有属性和方法
创建一个用户,创建一个管理员,管理员在继承用户的所有功能的基础上, 再新增一个删除用户的功能
ES6 实现继承
class User {
constructor(username, password) {
this.username = username
this.password = password
}
login() {
console.log('登陆')
}
}
class Admin extends User {
deletePerson() {
console.log('删除一个人')
}
}
let admin = new Admin()
admin.login()
admin.deletePerson()
ES5 实现继承
function User(username,password){
this.username = username
this.password = password
this.login = function(){
console.log('登陆')
}
}
function Admin(){
this.deletePerson = function()
{
console.log('删除一个人')
}
}
Admin.prototype = new User()
let admin = new Admin()
admin.login()
//admin --> Admin --> User --> Object
function User(username,password){
this.username = username
this.password = password
}
function Admin(){
this.deletePerson = function()
{
console.log('删除一个人')
}
}
Object.prototype.login =function(){
console.log('Object原型上的登陆方法')
}
Admin.prototype = new User()
let admin = new Admin()
admin.login()