高频面试题-“原型对象与原型链”

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();

以上是关于高频面试题-“原型对象与原型链”的主要内容,如果未能解决你的问题,请参考以下文章

算法面试手撕代码高频题汇集

高频算法面试题_旋转字符串(完整的代码实现)

2019年17道高频React面试题及详解

大数据高频面试题:HDFS核心高频面试题

uniapp 高频面试题合集

前端高频面试题 CSS篇