Javascript是基于原型的编程语言,并不是面向对象的语言。
ES6已实现class关键字,这让js看起来更像一门面向对象的语言
主流语言类型:
- 基于原型的语言
- 面向过程的语言
- 面向对象的语言
- 函数式的语言
每一种语言的编程方式以及语法都会有所不同。
虽然Javascript并没有内置的类的实现,但可以模拟。Javascript有构造函数和new运算符,我们可以通过构造函数来实例化一个对象。
当使用new关键字来调用构造函数时,执行上下文变成一个空的上下文,这个上下文代表了新生成的实例,所以this指向当前创建的实例。
面向对象应该是现在使用最广的一种编程思想不了解的点此,需自备*
说到面向对象,首先让我想起的是C++,在我的印象里,C++是一门严格遵循面向对象思想的一门语言,封装、继承、多态。不仅如此,还支持多继承,这是其它很多语言没有做到的。
Javascript面向对象实现
说到面向对象,最直观的就是通过 class 关键字来声明,因为js还没实现该关键字(ES6已实现),在这里我们直接用构造函数来模拟即可。(以C++为例,在生成一个对象的时候也是去调用构造函数来创建对象的)
面向对象的三个特点:
- 封装
- 继承
- 多态
创建一个Animal类
var Animal = function(){
/*属性*/
this.name = "animal";
/*方法[函数、方法,在这里为什么不称为函数而称之为方法?]*/
this.talk = function(){
console.log("what's your name?");
}
}
|
实例化对象
var Cat = new Animal;
var Dog = new Animal;
|
实例化一个对象时一般会需要进行初始化设置,这里可以通过构造函数传参实现
var Animal = function(name){
/*属性*/
this.name = name || "Animal";
/*方法*/
this.talk = function(){
console.log("My name is: ", name);
}
}
var cat = new Animal("Cat"); /*名字是Cat*/
var dog = new Animal("Dog"); /*名字是Dog*/
|
说明:
var name;
name = pname || "Animal";
/*与下面的功能等同*/
var name;
if(pname){
name = pname;
}else{
name = "Animal";
}
|
这是js的一种默认值设置技巧,当pname == undefined时,name赋值为 “Animal”,否则name等于pname
原文地址:点击打开链接