我对面向对象的深刻理解

2024-06-19 23:58
文章标签 面向对象 深刻理解

本文主要是介绍我对面向对象的深刻理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们之前已经对对象有所了解了,现在我们来说一下面向对象。

我对面向对象的认识是这样的,所谓的面向对象就是在不懂内部原理的情况下,对它的一个使用。比如在我们的生活中,

去餐厅吃饭时,我们仅只给厨师报上菜名,厨师就会把菜做出来,不需要去告诉厨师要怎样去做,用什么做,这就是面向对象

。万物皆对象,对象就是由属性和方法组成的。面向对象有三大特征,分别是封装,继承和多肽。

面向对象面向的是class,面向的是类,而在我们js中是没有class没有类的,它基于的原型。创建对象的方法有很多种

,最常用的有6种,分别是字面式、new Object()、工厂方式、构造函数式还有原型链创建的对象,最后一种是混合式创建,

就是构造函数和工厂方式组合在一起创建出来的对象。创建好对象之后我们就可以往里面添加属性了,我们可以利用this来添

加属性,但是我们在使用原型链创建出来的对象就要用prototype这个属性去添加了。每个函数都有一个属性叫做prototype。

这个prototype的属性值是一个对象,默认的只有一个叫做constructor的属性,指向这个函数本身。之后我们在创建好对象之

后,我们在调用对象的时候和其他的也是一样的new一个对象出来,这个对象的名称一旦使用,比如说var obj=new Object()

这个obj其实指向对象的内存地址的一个引用,引用可以调用对象里的属性和方法。

下面再来说一下js中面向对象的三大特征,封装,闭包是封装的最好体现,说起封装让我们不得不回想起变量,变量分为

全局变量和局部变量,全局变量比较简单,它可以在任何地方访问到,麻烦就麻烦在局部变量,局部变量一般在函数外是访问

不到的,这时候我们就可以用闭包了,我们在函数内部在来一个函数,这个函数称为二次函数,我们一般分为父函数和子函数

,子函数可以访问到父函数中的变量以及方法,我们称这个子函数为特权函数,闭包在我们的使用时应该尽量的少使用它,因

为它会占用内存,导致内存的泄漏,造成系统的崩溃,如果我们使用了的话,可以用标记清除或者引用计数的方法来清除。然

后就是继承,继承有三种方式 一种是原型链继承、另一种是构造函数式继承,最后一种是混合继承。我们刚才说过,子函数

可以访问到父函数的属性和方法,在原型链继承中,子对象有一个默认的属性叫__proto___,他指向的是这个方法的本身,而

这个方法的本身是不具有父方法的方法以及属性的,所以得调用它的prototype的属性,这个prototype属性又指向一个对象

,这个对象又是子方法的原型,那么这个原型他又是用父方法实例化出来的,所以又是他父对象的__proto__,这个__proto__

又指向的父对象本身那个prototype,这个prototype又调用他里面的属性和方法,这样的话就是他的原型链继承。构造函数式

继承最重要的一点就是冒充,父对象定义在子对象里面,在子对象里面可以引用父对象的属性和方法,在构造函数中有三个参数

需要注意一下,call apply aruments call和apply两种方法虽然都是继承属性,但书写格式存在不同这里call方法是通过this

后跟着一个字符串系列而apply方法同样也是通过this 不过传属性则是由数组构成,而argument中有两个属性分别是返回执行

函数本身的callee 还有一个形参的个数length,最后一种混合继承就比较简单了,就用构造和原型混用的方式来实现继承的。

最后一个特性是多肽就是一种食物的多种形态,允许将子类型的指针复制给父类类型的指针。

面向对象在实际中用来最多的是写插件、组件 写插件的一般步骤是定义一个原型,然后按照要求创建DOM元素,用原生或

js动态地去添加事件和方法,不过特殊事件要特殊处理,比如屏幕事件,屏幕的距离就要特殊处理,面向对象是一种通用思想

,并非只有编程中能用,在任何地方都可以用,面像对象提高了代码的复用性和可扩展性但是却降低了性能。

以上就是我对面向对象的理解,谢谢!

这篇关于我对面向对象的深刻理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1076524

相关文章

ffmpeg面向对象-待定

1.常用对象 rtsp拉流第一步都是avformat_open_input,其入参可以看下怎么用: AVFormatContext *fmt_ctx = NULL;result = avformat_open_input(&fmt_ctx, input_filename, NULL, NULL); 其中fmt_ctx 如何分配内存的?如下 int avformat_open_input(

chapter06 面向对象基础 知识点Note

文章目录 前言类的设计 属性和行为对象的内存解析 (堆 栈 方法区)类的成员之一 变量(属性) field类的成员之二 方法 method对象数组方法重载 overload可变个数的形参 语法糖方法的值传递机制递归关键字package importMVC设计模式import导入面向对象特征之一 封装类的成员之三 构造器JavaBeanUML类图 前言 ` 面向对象封装 面向

【JVM】JVM栈帧中的动态链接 与 Java的面向对象特性--多态

栈帧 每一次方法调用都会有一个对应的栈帧被压入栈(虚拟机栈)中,每一个方法调用结束后,都会有一个栈帧被弹出。 每个栈帧中包括:局部变量表、操作数栈、动态链接、方法返回地址。 JavaGuide:Java内存区域详解(重点) 动态链接 动态链接:指向运行时常量池中该栈帧所属方法的引用。 多态 多态允许不同类的对象对同一消息做出响应,但表现出不同的行为(即方法的多样性)。 多态

java基础总结15-面向对象11(抽象类)

下面通过一下的小程序深入理解抽象类 因此在类Animal里面只需要定义这个enjoy()方法就可以了,使用abstract关键字把enjoy()方法定义成一个抽象方法,定义如下:public abstract void enjoy();   从某种意义上来说,抽象方法就是被用来重写的,所以在父类声明的抽象方法一定要在子类里面重写。如果真的不想在子类里面重写这个方法,那么可以再在子类里

java基础总结14-面向对象10(多态)

面向对象最核心的机制——动态绑定,也叫多态 1 通过下面的例子理解动态绑定,即多态 package javastudy.summary;class Animal {/*** 声明一个私有的成员变量name。*/private String name;/*** 在Animal类自定义的构造方法* @param name*/Animal(String name) {this.name = n

java基础总结13-面向对象9(对象转型)

对象转型分为两种:一种叫向上转型(父类对象的引用或者叫基类对象的引用指向子类对象,这就是向上转型),另一种叫向下转型。转型的意思是:如把float类型转成int类型,把double类型转成float类型,把long类型转成int类型,这些都叫转型。把一种形式转成另外一种形式就叫转型。除了基础数据类型的转型之外(基础数据类型的转型:大的可以转成小的,小的也可以转成大的。),对象领域里面也有对象之

java基础总结12-面向对象8(Object类)

1 Object类介绍 Object类在JAVA里面是一个比较特殊的类,JAVA只支持单继承,子类只能从一个父类来继承,如果父类又是从另外一个父类继承过来,那他也只能有一个父类,父类再有父类,那也只能有一个,JAVA为了组织这个类组织得比较方便,它提供了一个最根上的类,相当于所有的类都是从这个类继承,这个类就叫Object。所以Object类是所有JAVA类的根基类,是所有JAVA类的老祖宗

java基础总结11-面向对象7(super关键字)

在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象。怎么去引用里面的父类对象呢?使用super来引用,this指的是当前对象的引用,super是当前对象里面的父对象的引用。 1 super关键字测试 package cn.galc.test;/*** 父类* @autho

java基础总结10-面向对象6(方法的重载)

1 方法的重载 方法名一样,但参数不一样,这就是重载(overload)。   所谓的参数不一样,主要有两点:第一是参数的个数不一样,第二是参数的类型不一样。只要这两方面有其中的一方面不一样就可以构成方法的重载了。 package cn.galc.test;public class TestOverLoad {void max(int a, int b) {System.out.prin