javascript面向对象之对象的深入理解

 更新时间:2023年05月01日 20:42:17   投稿:shichen2014  
这篇文章主要介绍了javascript面向对象之对象的深入理解,将javascript面向对象程序设计中一切都视为对象,并以实例形式进一步分析了面向对象的特性,需要的朋友可以参考下

本文进一步分析讲述了javascript面向对象之对象的深入理解。分享给大家供大家参考。

1.面向对象与面向编程的比较

1.1 面向对象(oop)

  • 面向对象是把事物分解称为一个个对象,然后由对象之间分工与合作,是以对象功能划分问题,而不是步骤
  • 特征: 封装性、继承性、多态性
  • 优点: 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
  • 缺点: 性能比面向过程低

面向对象的思维特点:

  1. 抽取(抽象)对象共用的属性和行为组织(封装)成一个类(模板)
  2. 对类进行实例化, 获取类的对象

1.2 面向过程(pop)

  • 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了,面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了
  • 优点:性能比面向对象高,适合跟硬件联系很紧密的东西,例如单片机就采用的面向过程编程。
  • 缺点:没有面向对象易维护、易复用、易扩展

2. ES6中的类和对象

在js中,对象是一组无序的相关属性和方法的集合,万物皆对象
对象是由属性和方法组成的:

  • 属性: 事物的特征,在对象中用属性来表示
  • 方法: 事物的行为,在对象中用方法来表示

在 ES6 中新增加了类的概念,可以使用 class 关键字声明一个类,之后以这个类来实例化对象
类与对象的区别:

  • 类抽象了对象的公共部分,它泛指某一大类(class)
  • 对象特指某一个,通过类实例化一个具体的对象

2.1 类的创建

语法:

class name {
// 添加属性和方法,也可以再嵌入一个类
	class age {},	
}

创建实例

let a = new name();
// 类必须使用new实例化对象

2.2 类 constructor 构造函数

constructor() 方法是类的构造函数(默认方法),用于传递参数,返回实例对象,通过 new 命令生成对象实例时,自动调用该方法。如果没有显示定义, 类内部会自动给我们创建一个constructor()

语法:

class Person {
  constructor(name,age) {   // constructor 构造方法或者构造函数
      this.name = name;
      this.age = age;
    }
    sayHi() {
    console.log('我会唱歌');
    }
    // 注意,方法之间不需要加逗号。同时函数不需要加function关键字
} 

创建实例:

var ldh = new Person('刘德华', 18); 
console.log(ldh.name);
ldh.sayHi();

2.3 类的继承

实例:

class Father {
      constructor(surname) {
        this.surname= surname;
      }
      say() {
        console.log('你的姓是' + this.surname);
       }
}
class Son extends Father{  // 这样子类就继承了父类的属性和方法
}
var damao= new Son('刘');
damao.say(); 

super关键字用于访问和调用对象父类上的函数,可以调用父类的构造函数,也可以调用父类的普通函数

语法:

class Father {
            constructor(x,y) {
                this.x = x;
                this.y = y;
            }
            sum() {
                console.log(this.x + this.y);
            }
           say() {
               return '我是爸爸';
           }
        }
class Son extends Father{
            constructor(x,y) {
                // this.x = x;
                // this.y = y;
               super(x,y); // 调用了父类中的构造函数  ,super必须写在子类this之前调用
               // 子类在构造函数中使用super, 必须放到 this 前面  (必须先调用父类的构造方法,在使用子类构造方法)
                this.x = x;
                this.y = y;
            }
            say() {
                console.log(super.say() + '的儿子');  // 利用super调用父类的函数
            }
            substract() {
                console.log(this.x - this.y);
            }
        }
        var son = new Son(11,2);
        console.log(son);
        son.say();
        son.substract();
        son.sum(); 

2.4 注意点

  • 在 ES6 中类没有变量提升,所以必须先定义类,才能通过类实例化对象.
  • 类里面的共有属性和方法一定要加this使用.
  • 类里面的this指向问题.
  • constructor 里面的this指向实例对象, 方法里面的this 指向这个方法的调用者

补充

具体分析如下:

javacript面向对象程序设计中,可以理解为一切都是对象。

实例代码如下:

<script language="javascript" type="text/javascript">
function Cat(){
}
var cat1 = new Cat();//创建类实例
cat1.name = "小狗";
cat1.age = 4;
cat1.color="白色";
document.write(cat1.name);
document.writeln(cat1.constructor);//实例化后对象,是对象
document.writeln(typeof(cat1)+"<hr />");
document.writeln(Cat.constructor);//原型对象本身也是对象
document.writeln(typeof Cat+"<hr />");
var b="hello";//字符串也是对象
document.writeln(b.constructor);//输出它的构造函数
document.writeln(typeof b+"<hr />");
var c=123;//数值也是对象
document.writeln(c.constructor);
document.writeln(typeof c+"<hr />");
</script>

判断一个实例化对象是不是某个原型对象类型

if(cat1 instanceof Cat){//与php的判断方法相同
 window.alert("ok");
}

希望本文所述对大家的javascript程序设计有所帮助。

相关文章

  • js+cookies实现悬浮购物车的方法

    js+cookies实现悬浮购物车的方法

    这篇文章主要介绍了js+cookies实现悬浮购物车的方法,涉及javascript数值计算与cookie的相关操作技巧,需要的朋友可以参考下
    2015-05-05
  • js百度地图鼠标滚轮缩放导致地图中心点偏移问题

    js百度地图鼠标滚轮缩放导致地图中心点偏移问题

    本文主要介绍了js百度地图鼠标滚轮缩放导致地图中心点偏移问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • js如何查找json数据中的最大值和最小值方法

    js如何查找json数据中的最大值和最小值方法

    这篇文章主要介绍了js如何查找json数据中的最大值和最小值方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 详解JavaScript执行模型

    详解JavaScript执行模型

    这篇文章主要介绍了JavaScript执行模型的相关资料。帮助大家更好的理解和学习JavaScript,感兴趣的朋友可以了解下
    2020-11-11
  • js打开新窗口方法整理

    js打开新窗口方法整理

    js打开新窗口的方法有很多,本文大致整理了一些,需要的朋友可以参考下
    2014-02-02
  • 微信小程序bindtap与catchtap的区别详解

    微信小程序bindtap与catchtap的区别详解

    本文主要介绍了微信小程序bindtap与catchtap的区别详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • JavaScript判断文件上传类型的方法

    JavaScript判断文件上传类型的方法

    这篇文章主要介绍了JavaScript判断文件上传类型的方法,可实现针对重复的内容也能触发onchange事件,需要的朋友可以参考下
    2014-09-09
  • 微信小程序把百度地图坐标转换成腾讯地图坐标过程详解

    微信小程序把百度地图坐标转换成腾讯地图坐标过程详解

    这篇文章主要介绍了微信小程序把百度地图坐标转腾讯地图坐标过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • javascript控制层显示或隐藏的方法

    javascript控制层显示或隐藏的方法

    这篇文章主要介绍了javascript控制层显示或隐藏的方法,涉及javascript操作页面元素样式的相关技巧,非常简单实用,需要的朋友可以参考下
    2015-07-07
  • JavaScript键盘事件响应顺序详解

    JavaScript键盘事件响应顺序详解

    这篇文章主要为大家详细介绍了JavaScript键盘事件响应顺序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09

最新评论