资讯专栏INFORMATION COLUMN

浅谈JavaScript中的面向对象

Magicer / 1674人阅读

摘要:面向对象面向对象编程的全称是,简称,面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式。面向对象编程的三个主要特征是封装继承多态。

面向对象

面向对象编程的全称是Object Oriented Programming,简称OOP,面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式。
面向对象编程可以看做是使用一系列对象相互协作的软件设计,面向对象程序设计的目的是在编程中促进更好的灵活性和可维护性。凭借其对模块化的重视,面向对象的代码开发更简单,更容易理解。
面向对象编程的三个主要特征是:1.封装 2.继承 3.多态。
所有程序是由一定的属性和行为对象组成的,不同的对象的访问通过函数调用来完成,对象间所有的交流都是通过方法调用,通过对封装对象数据,提高复用率。
JavaScript是一种基于原型的面向对象语言,而不是基于类,正是由于这一根本的区别,其如何创建对象的层级结构以及对象的属性与属性值是如何继承的并不是那么清晰。
基于原型的语言并不存在这种区别:它只有对象。基于原型的语言具有所谓原型对象的概念。原型对象可以作为一个模板,新对象可以从中获得原始的属性。任何对象都可以指定其自身的属性,既可以是创建时也可以在运行时创建,而且,任何对象都可以作为另一个对象的原型,从而允许后者共享前者的属性。

封装

封装就是按照要求使用并得到对应的结果,而不需要知道其真实的执行原理是怎么样的。
封装主要用于阐述对象中所包含(或封装)的内容,它们通常由两部分组成:
1.相关的数据(用于存储属性)
2.基于这些数据所能做的事情

继承

继承通常是指类与类之间的关系,如果两个类都有相同的属性和方法,那么可以让一个类继承于另一个类,这样就不需要在前者再次定义同样的属性或方法。
创建一个或多个类的专门版本类方式称为继承(JavaScript只支持单继承)。创建的专门版本的类通常叫做子类,另外的类通常叫做父类。
在JavaScript中,继承通过赋予子类一个父类的实例并专门化子类来实现。

多态

不同的对象可以定义具有相同名称的方法,方法是作用于所在的对象中。这种不同对象通过相同方法的调用实现各自行为的能力,被称之为多态。
例如A对象具有sayMe()方法,B对象继承与A对象,那B对象中也具有sayMe()方法。当调用sayMe()方法时,并不知道该方法是A对象还是B对象。但这并不影响代码的正常工作。

构造函数

构造函数又称为构造器或对象模板,是对象中的一个方法,在实例化时构造器被调用。在JavaScript中函数就可以作为构造器使用,因此不需要特别定义一个构造器方法。

//这里的Fun()并不是作为函数,而是构造函数
function Fun(){
    console.log("这是一个构造函数");
}
//创建fn对象需要使用new关键字
var fn=new Fun();

构造函数的属性
构造函数的属性实际上就是对象的变量。一个对象可以包含多个属性,定义构造函数的属性时使用this关键字。

function Fun(firstName){
    this.firstName=firstName;
    console.log("这是一个构造函数");
}

var fn=new Fun("张三");
console.log("这个是"+fn.firstName);

构造函数的方法
构造函数的方法很想构造函数的属性,不同的是方法是一个函数(或者像函数一样被定义)。定义构造函数的方法时使用this关键字。

var Fun=function(name){
    this.name=name;
    this.sayMe=function(){
        console.log("hello"+this.name);
    }
}
var fn=new Fun("张三");
fn.sayMe();
this关键字

JavaScript有一套完全不同于其他语言对this处理机制,this关键字本身没有任何含义,在如下几种不同的情况下,this指向的各不相同

全局范围内:this关键字指向全局对象

this.num=100;
consolo.log(a);

构造函数内:this关键字会指向新创建的对象

构造函数的方法内:this关键字会指向当前对象

var hero={};
hero.sayName=function(){
    return "hello"+this.name;
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108157.html

相关文章

  • 浅谈面向对象javascript几个特性

    摘要:中的和是一门很灵活的语言,尤其是。即然是面向对象的编程语言,那也是不可或缺的。在中,永远指向的是他的调用者。定义是存在于实例化后对象的一个属性,并且指向原对象的属性。我们在扩展的时候,同时父类也会有对应的方法,这很显然是一个很严重的问题。 javascript中的this和new javascript是一门很灵活的语言,尤其是function。他即可以以面向过程的方式来用,比如: f...

    JayChen 评论0 收藏0
  • 浅谈JavaScript面向对象和它的封装、继承、多态

    摘要:会造成内存浪费的问题构造函数继承声明父类声明子类生成实例组合式继承组合式继承是汲取了两者的优点,既避免了内存浪费,又使得每个实例化的子类互不影响。 写在前面 既然是浅谈,就不会从原理上深度分析,只是帮助我们更好地理解... 面向对象与面向过程 面向对象和面向过程是两种不同的编程思想,刚开始接触编程的时候,我们大都是从面向过程起步的,毕竟像我一样,大家接触的第一门计算机语言大概率都是C语...

    MAX_zuo 评论0 收藏0
  • 浅谈OOP Javascript [1]

    摘要:工厂模式优点集中实例化,可以传参等缺点分不清属于哪个对象我们先来谈谈优点,看例子集中实例化返回实例化对象返回返回不难看出,工厂模式比上面的例子减少了很多代码。 ECMAscript开发的两种模式:1.过程化 2.OOP(面向对象) 面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性的方法的对象。但是ECMAscript中没有类的概念! 又谈作用域 首先...

    xinhaip 评论0 收藏0
  • 浅谈JavaScript面向对象

    摘要:不必在构造函数中定义对象实例的信息。其次,按照一切事物皆对象的这饿极本的面向对象的法则来说,类本身并不是一个对象,然而原型方式的构造函数和原型本身也是个对象。第二个问题就是在创建子类型的实例时,不能向超类型的构造函数中传递参数。 前言 对象(Object)应该算是js中最为重要的部分,也是js中非常难懂晦涩的一部分。更是面试以及框架设计中各出没。写这篇文章,主要参考与JavaScrip...

    cyixlq 评论0 收藏0
  • 浅谈 JavaScript 原型链

    摘要:数组的构造函数是原型链的指向与其他除以外的构造函数相同,的也指向顶级原型对象,每一个数组都是的实例,都指向。实例对象查找构造函数原型对象的方法一般会把对象共有的属性和方法都放在构造函数的原型对象上。 showImg(https://segmentfault.com/img/remote/1460000018998704?w=900&h=506); 阅读原文 概述 在 JavaScr...

    explorer_ddf 评论0 收藏0

发表评论

0条评论

Magicer

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<