高频面试题-“原型对象与原型链”
Posted 小hu同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高频面试题-“原型对象与原型链”相关的知识,希望对你有一定的参考价值。
什么是原型?
每一个对象都有它的原型对象,他可以使用自己原型对象上的所有属性和方法
代码实例(proto)
let dog = {
name:"旺旺"
}
//给这个追加一个eat 属性,并且打印出来
dog.__proto__.eat = function(){
console.log("啃骨头")
}
dog.eat();
获取原型的方法:
1、通过对象的__proto__获取
2、通过构造函数的prototype属性拿到原型
代码实例(prototype)
function Dog(name,age){
this.name = name;
this.age = age;
}
let dog = new Dog'旺旺',3)
dog.eat();
//这个时候我们去调用这个eat 是会报错的,因为dog上面没有eat
使用prototype
function Dog(name,age){
this.name = name;
this.age = age;
}
//在构造函数上面 扩展原型对象
let dog = new Dog'旺旺',3)
Dog.prototype.eat = function(){
console.log('啃骨头')
}
dog.eat();
有什么作用?
//原型对象有什么作用
let date = new Date();
//打印当前的时间
console.log(date)
Date.prototype.formate = function(){
let year = this.getFullYear();
let month = this.getMonth() + 1;
let date = this.getDate();
return `${year}年${month}月${date}日`
}
//目标:输出 2021年 8月 31日
console.log(date.formate())
ES6类的基本语法
class Dog{
constructor(name,age){
this.name = name;
this.age = age;
}
}
//在类上面添加一个prototype
Dog.prototype.eat = function(){
console.log('啃骨头')
}
let dog = new Dog('旺财',6);
//console.log(dog.name)
dog.eat()
类与继承的应用案例
//给用户设置一个用户名和密码
class User {
constructor(username,pwd){
this.username = username;
this.pwd = pwd;
}
//里面的是登录的方法
login(){
console.log('登录')
}
}
//管理员通过extends 继承了用户的登录权限
class Admin extends User{
//并且还加了一个 删除用户的功能
delete(){
console.log('删除用户')
}
}
//通过 admin 来继承user里面的登录
let admin = new Admin();
admin.login()
ES5(prototype)来实现继承
function User(username,pwd){
this.username = username;
this.pwd = pwd;
this.login = function(){
console.log('登录')
}
}
function admin(){
this.delete = function(){
console.log('删除用户')
}
}
admin.prototype = new User()
let Admin = new admin();
Admin.login();
以上是关于高频面试题-“原型对象与原型链”的主要内容,如果未能解决你的问题,请参考以下文章