什么是原型?作用是什么?
a:当有一个对象叫User,User.prototype即是它的原型,我觉得叫父类更好理解
b:显示原型User.prototype
c:隐式原型 new User()._proto_
原型相当于该实例的一个父类,当需要定义公共方法时,需要用到原型
核心:定义公有方法
//demo1
function User(username,password){
this.username = username;
this.password = password;
}
//1.调用原型
console.log(User.prototype);//Object constructor: ƒ User(username,password)__proto__: Object
let user1 = new User('zs','123');
let user2 = new User('ls','456');
console.log(user1.__proto__);//Object constructor: ƒ User(username,password)__proto__: Object
console.log(user2.__proto__);//Object constructor: ƒ User(username,password)__proto__: Object
//2.定义公共方法
//2.1私有方法
user1.login = ()=>{
console.log('登陆');
}
user2.loginOut = ()=>{
console.log('退出登陆');
}
//2.2公有方法
User.prototype.sleep = ()=>{
console.log('睡着了');
}
user1.login();//登陆
user2.loginOut();//退出登陆
user1.sleep();//睡着了
user2.sleep();//睡着了
/**
* 显示原型 User.prototype
* {
* a:通过类调用
* }
* ------------------------------------------------
* 隐式原型 user._proto_
* {
* a:通过实例取调用
* b:根据命名规则下划线开头的对象即为私有对象,那应该是不能调用的,下面尝试一下
* c:调用隐式原型报错如下:Uncaught TypeError: Cannot set property 'eat' of undefined
* }
*
* */
//调用 隐式原型的方式 提供一个公用方法
//Uncaught TypeError: Cannot set property 'eat' of undefined
/*user1._proto_.eat = ()=>{
console.log(this.name + 'eat shit');
}*/