持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
前言
通过第一篇浅谈了面向对象的概念和对象的详解之后,今天再继续了解通过面向对象是如何去实现代码的。
需要了解的一些属性和方法概念
1.公有属性和方法
设置给实例化对象的属性和方法,被称作为公有属性和公有方法,可直接调用使用
2.私有属性和私有方法
在构造函数中声明的属性和方法,被称作为私有属性和私有方法,不可直接调用使用
3.静态属性和静态方法
直接给构造函数对象扩展的属性和方法,无须实例化就能使用的 被称为静态属性和静态方法
4.特权方法
在构造函数中给实例化对象扩展的方法,被称作为特权方法
5.私有方法和特权方法的区别
特权方法是指有权访问内部私有属性和私有方法的公有方法,而私有方法是指外部不可见且不可访问的方法
通过一个demo示例一下这些方法的用处
模拟一个私人医生
function person (cure){
//医生具备公有的治疗属性 公有属性
this.cure = cure
//私人医生具有个人方案 私有属性
var plan = '个人方案'
//私有方法
function fn(){
console.log('这配方只给你用')
}
//特权方法
this.vip = function(){
console.log('对你实行具体计划安排')
}
}
//公有方法
person.prototype.do = function(){
console.log('会诊断')
}
//静态方法
person.say = function(){
console.log('我医术高明')
}
var result = person('aaa')
面向对象三大特性
不用多说,大家都知道,封装、继承、多态,那我就再详细的说说吧
封装
封装就是将信息隐藏,内部对外部隐藏。分为封装数据和封装实现
- 封装数据:JS中依靠作用域来封装数据
- 封装实现就是隐藏细节,隐藏行为,让内部的行为对外不可见。降低耦合,使用户不需要考虑实现,只需要通过API接口调用即可
多态
同一个操作作用在不同的对象上边,产生不同的结果,被称作为多态
// Cat 构造函数
function Cat(){}
Cat.prototype.eat = function(){
console.log('猫粮')
}
var cat = new Cat()
//Dog 构造函数
function Dog(){}
Dog.prototype.eat = function(){
console.log('狗粮')
}
var dog = new Dog()
//封装一个指令
function goToEat(obj) {
obj.eat();
}
//同一个指令作用在不同的对象上
goToEat(cat);
goToEat(dog);
继承
当一个对象可以使用另外一个对象的属性和方法的时候,称作为继承
构造函数+原型 组合继承
//父类
function Animal(name, sex) {
this.name = name;
this.sex = sex;
}
Animal.prototype.speak = function () {
console.log("喵呜")
}
//子类
function Cat(type, name, sex) {
/*
构造函数继承:
让父类构造函数中的this指向子类构造函数的this,
子类构造函数的实例化对象就拥有了父类和子类的属性
*/
Animal.call(this, name, sex)
this.type = type;
}
/*
原型继承:
不能直接把父类的原型对象赋值给子类的原型对象,
因为赋值是地址值的赋值,修改子类,父类也会被修改
比如Cat.prototype = Animal.prototype;
*/
Cat.prototype = new Animal();
//原型继承后要修正原型链
Cat.prototype.constructor = Cat;
console.log(Cat.prototype.constructor === Cat) //true
Cat.prototype.do = function () {
console.log("给你一爪子");
}
var cat = new Cat("银渐层", "月月", '母');
console.log(cat.name); //月月
console.log(cat.speak); // f(){console.log("喵呜")}
var animal = new Animal();
console.log(animal);
好了,以上就是本篇文章的分享,感谢阅读!