面向对象
面向对象三要素:
1.封装
。组装:将数据和操作组装到一起。
。隐藏数据: 对外只暴露一些接口,通过接口访问对象。 比如驾驶员使用汽车,不需要了解汽车的构造细节,只需要知道使用什么部件怎么驾驶就行,踩了油门]就能跑,可以不了解其中的机动原理。
2.继承
。多复用,继承来的就不用自己写了
。多继承少修改,OCP (Open-closed Principle) ,使用继承来改变,来体现个性
3.多态
。面向对象编程最灵活的地方,动态绑定
原型对象
●JavaScript 中每个对象都有一个原型对象。可以通过_ proto__ 属性来访问到对象的原型对象
●构造函数的prototype属性指向一个对象,这个对象是该构造函数实例化出来的对象的原型对象
●JavaScript中的每一 个对象,都是从object. prototype对象克隆而来avaScript中的每一 个对象,都是从object. prototype对象克隆而来
居于对象创键对象:
我们在使用0 bject.create()方法来克隆对象的时候,还可以传入第2个参数,第2
个参数是一个JSON对象,里面可以书写新对象的一些属性设定,示例如下:
原型相关方法:
1.prototype 和__proto__:可以找到自己的原型对象
const arr = [1,2,3,4,5];
console.log(Array.prototype); // []
console.log(arr.__proto__); // []
console.log(Array.prototype === arr.__proto__); // true
2.Object.getPrototypeOf() ;也可以找到自己的原型对象
let arr = [1,2,3,4,5]
console.log(Object.getPrototypeOf(arr)); // []
3.constructor 属性(可以查看一个对象的构造函数是什么)
const arr = [1,2,3,4,5];
console.log(arr.constructor); // [Function: Array]
- instanceof 操作符 (判断一个对象是否是一个构造函数的实列)
const arr = [1,2,3,4,5];
console.log(arr instanceof Array); // true
console.log(arr instanceof Number); // false
- isPrototypeOf() 方法(返回一个布尔值 检测一个对象是否是一个实列对象的原型对象)
const arr = [1,2,3,4,5];
console.log(Array.prototype.isPrototypeOf(arr)); // true console.log(arr.__proto__.isPrototypeOf(arr)); // true
6.6. hasOwnProperty() 判断一个属性是否是自己本身的还是继承而来 本身返回true 继承返回false
构造函数
let obj={
name:"李三",
age:50
}
let obj1=Object.create(obj,{
gender:{
value:'男',
writable:false,
enumerable:true
},
say1:{
value:function(){
console.log("122222211");
}
}
})
let cat=function(name,age){
this.age=age;
this.name=name;
}
cat.prototype.show=function(){
console.log(`这是一只${this.name},${this.age}岁`)
}
class cat {
constructor(name, age) {
this.age = age;
this.name = name;
}
show() {
console.log(`这是一只${this.name},${this.age}岁`)
}
}
let dog = new cat("狗", 18)
console.log(dog.name, dog.age)
dog.show();