面向对象语言
面向对象语言(Object-Oriented Language)是一类以对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。语言中提供了类、继承等成分,有识认性、多态性、类别性和继承性四个主要特点。
中文名: 面向对象语言
外文名:Object-Oriented Language
主要特点:面向对象语言刻画客观系统较
原型对象
在JavaScript中,没有类的概念,对象的产生是通过原型对象而来的。这里,我将对JavaScript中的原型对象进行简单介绍。
在JavaScript中,每一个对象,都有一个原型对象。而原型对象上面也有一个自己的原型对象,一层一层向上找,最终会到达null。这听起来感觉有点复杂,我将通过一张图来进行解释,如下图:
通过上图,我们可以得到以下结论:
1.JavaScript 中每个对象都有一个原型对象。可以通过__proto__属性来访问到对象的原型对象。
2.通过__proto__属性一直向上寻找原型对象的话,最终会找到null。
3.构造函数的prototype属性指向一个对象,这个对象是该构造函数实例化出来的对象的原型对象。
4.JavaScript中的根对象是Object.prototype对象。Object.prototype对象是一个空对象。
5.JavaScript中的每一个对象,都是从Object.prototype对象克隆而来的。Object.prototype对象就是它们的原型。而Object.prototype对象的原型为null。
创建一个对象(类)
语法:
let obj = {
name:"zhangsan",
age: 18
};
let obj2 = Object.create(obj, {
gender: {
value: "male",
writable: false, //设置不能被更改
enumerable: true //是否能被遍历
},
sayHello: {
value:function () {
return "你好!,zhangsan";
}
}
});
obj2.gender="falmale";
console.log(obj2.name + " " + obj2.age + " " + obj2.gender + " "+obj2.sayHello());
构造函数
定义:用函数来模拟其它面向对象语言中的类,规则(函数名首字母大写)
//宠物类
let Pet=function (name,types) {
this.name=name;
this.types=types;
};
//将相同的方法或属性放在原型链上,方便代码的复用
Pet.prototype.say=function(){
return `hello!我叫:${this.name},我是一只可爱的${this.types}`;
};
//创建一个狗类
let dog=new Pet("泰迪","小狗");
console.log(dog.name+" "+dog.types+" "+dog.say());
ES6语法:
//宠物类
class Pet{
constructor(name,types){
this.name=name;
this.types=types;
}
//将放在原型链的属性或方法写在constructor外
say(){
return `hello!我叫:${this.name},我是一只可爱的${this.types}`;
}
}
let cat=new Pet("小猫咪","猫类");
console.log(cat.name+" "+cat.types+" "+cat.say());
静态方法
定义:不需要实例化,可以直接调用
ES5:
//宠物类
let Pet=function (name,types) {
this.name=name;
this.types=types;
};
//将相同的方法或属性放在原型链上,方便代码的复用,静态方法
Pet.say=function(){
return `hello!我叫:${this.name},我是一只可爱的${this.types}`;
};
console.log(Pet.say());
ES6:
//宠物类
class Pet{
constructor(name,types){
this.name=name;
this.types=types;
}
//将放在原型链的属性或方法写在constructor外
static say(){
return `hello!我叫:${this.name},我是一只可爱的${this.types}`;
}
}
console.log(Pet.say());