设为首页 加入收藏

TOP

JavaScript面向对象基础与this指向问题
2017-11-13 14:55:44 】 浏览:364
Tags:JavaScript 面向 对象 基础 this 指向 问题

前  言


         


我们的程序语言经历了从“面向机器”、到“面向过程”、再到“面向对象”的一个过程。而java script是一门基于对象的一门语言,它介于面向过程与面向对象之间。在学习java script的过程中,OOP是非常重要的一环,下面我们来一起探讨一下JS中的面向对象吧!!!


面向过程:专注于如何去解决一个问题的过程步骤。编程特点是由一个个的函数去实现每一步的过程步骤,没有类和对象的概念。


面向对象:专注于由哪一个对象来解决这个问题。编程特点是出现了一个个的类,从类中拿到这个对象,由这个对象去解决具体的问题。


对于调用者来说,面向过程需要调用者自己去实现各种函数。而面向对象,只需要告诉调用者对象中具体方法的功能,而不需要调用者了解方法中的实现细节。 


继承、封装、多态


:一类具有相同特征(属性)和行为(方法)的集合。


比如:人类-->属性:身高、体重、性别     方法:吃饭、说话、走路


对象:从类中,拿出具有确定属性值和方法的个体。


比如:张三-->属性:身高180、体重180  方法:说话-->我叫张三,身高180


类和对象的关系


类是抽象的,对象是具体的(类是对象的抽象化,对象是类的具体化)


解释一下:


类是一个抽象的概念,只能说类有属性和方法,但是不能给属性赋具体的值。比如说人类有姓名,但是不能说人类的姓名叫啥。。。


对象是一个具体的个例,是将类中的属性进行具体赋值而来的个体。比如说张三是人类的一个个体,可以说张三的姓名叫张三。也就是张三对人类的每一个属性进行了具体的赋值,那么张三就是由人类产生的一个对象。


①创建一个类(构造函数):类名必须使用大驼峰法则,即每个单词的首字母必须大写。


②通过类,实例化(new)出一个对象。


③注意事项


>>>通过类名,new出一个对象的过程,叫做“类的实例化”


>>>类中的this,会在实例化的时候,指向新new出的对象。所以,this.属性 this.方法,实际上是将属性和方法绑定在即将new出的对象上面。


>>>在类中,要调用自身属性,必须使用this.属性名、如果直接使用变量名,则无法访问对应的属性。


>>>类名必须使用大驼峰法则,注意与普通函数的区别。


constructor:返回当前对象的构造函数


>>>zhangsan.constructor = Person;   √


instanceof:检测一个对象,是不是一个类的实例;


>>>lisi instanceof Person √   lisi是通过Person类new出的


>>>lisi instanceof Object √   所有对象都是Object的实例


>>>Person instanceof Object √   函数本身也是对象


在上一部分中,我们创建了一个类,并通过这个类new出了一个对象。 但是,这里面出现了大量的this。 很多同学就要懵逼了,this不是“这个”的意思吗?为什么我在函数里面写的this定义的属性,最后到了函数new出的对象呢??


① this指向谁,不应该考虑函数在哪声明,而应该考虑函数在哪调用!!
② this指向的,永远只可能是对象,不可能是函数!!
③ this指向的对象,叫做函数的上下文context,也叫函数的调用者。


① 通过函数名()调用的,this永远指向window



② 通过对象.方法调用的,this指向这个对象



③ 函数作为数组的一个元素,用数组下标调用,this指向这个数组



④ 函数作为window内置函数的回调函数使用,this指向window。比如setTimeout、setInterval等



⑤ 函数作为构造函数,使用new关键字调用,this指向新new出的对象


好了,这篇博客,我们了解了什么是面向对象、类和对象的关系、JS中声明类与对象的步骤,以及重点讲解的this指向问题! 希望能够帮助大家真正的理解了this的认知,下面我会继续给大家分享关于面向对象方面的问题。多谢大家的支持!!!


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇OpenCV 图像细化 下一篇JavaScript面向对象中的继承

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目