最近在学习设计模式,找了很多资料也没有看懂,看到怀疑智商,怀疑人生,思来想去还是把锅甩到基础不够扎实上。虽然原型继承、闭包、构造函数也都有学习过,但理解得不够透彻,影响到后续提高。这次重新开始学习,一边记录总结,希望有所收获,如果能对一起学习的小伙伴有帮助就更好了。

第一篇先从构造函数谈起。构造函数顾名思义,是用来构造的,构造什么呢?构造对象。在 javascript 中,对象是拥有属性和方法的数据。举个简单的例子,如果把一个人看作一个对象,那么年龄、性别等就是它的属性,吃饭、睡觉等是它的方法。我们来创建一个 jack 对象:

var jack = {
name: 'Jack',
jump: function() {
console.log('Jack-jump')
}
}

如果我们想再创建一个 rose 对象,还需要把上面的代码再写一遍,而二人仅仅是名字不同。这时候我们会想到用一个函数来创建对象,对象名字可通过传参获取。

function createPerson(name) {
var person = {}
person.name = name
person.jump = function() {
console.log(name + '-jump')
}
return person
}

测试结果

var jack = createPerson('Jack')
jack.jump() // Jack-jump
var rose = createPerson('Rose')
rose.jump() // Rose-jump

这个函数可以满足我们的需求,但不够简洁,下面我们来看一下怎么利用构造函数来创建对象

function Person(name) {
this.name = name
this.jump = function() {
console.log(this.name + '-jump')
}
}

是不是简洁了很多?当我们需要创建具体人物时,使用 new 关键词来创建对象,创建出来的对象也叫做实例。

var jack = new Person('Jack')
jack.jump() // Jack-jump
var rose = new Person('Rose')
rose.jump() // Rose-jump

这里需要解释一下 this 和 new 的意义。细心的人会发现在写构造函数时函数名首字母用了大写,显得和普通函数不一样,有些神秘,其实构造函数和普通函数本质上并没有什么不同,用大写仅仅是为了同普通函数区分,表示这是一个要用来创建对象的函数。重点在关键词 new 上,简单来说,new 一个实例有以下步骤:

1. 创建一个新对象

2. 将构造函数作用域赋给新对象(即 this 指向新对象)

3. 执行函数里的代码

4. 返回函数

我们发现1、3、4就是 createPerson 函数所做的事,至于2涉及到作用域比较复杂,后面有时间再研究总结,现在只要知道 this 指向了 new 出来的新对象,因此我们给 this 增加的属性和方法都会绑定到新对象上去。

至此我们知道了如何利用构造函数(其实本质上是用 new 关键词)创建对象,它比一般函数直接创建要简洁很多。

javascript 面向对象学习(一)——构造函数的更多相关文章

  1. (二)Javascript面向对象编程:构造函数的继承

    Javascript面向对象编程:构造函数的继承   这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承 ...

  2. Javascript面向对象——创建对象、构造函数的原型

    Javascript面向对象--创建对象.构造函数的原型 其实:JavaScript中的创建类,就是创建一个构造函数,在创建对象时用到new这个关键字, 一.创建对象 1.函数创建对象 functio ...

  3. JavaScript面向对象学习笔记

    JavaScript 常被描述为一种基于原型的语言 (prototype-based language)--每个对象拥有一个原型对象,对象以其原型为模板.从原型继承方法和属性.原型对象也可能拥有原型, ...

  4. javascript面向对象学习(一)

    面向对向的初体验 创建一个标签 // 传统 var p = document.createElement('p'); var txt = document.createTextNode('我是传统js ...

  5. javascript 面向对象学习(三)——this,bind、apply 和 call

    this 是 js 里绕不开的话题,也是非常容易混淆的概念,今天试着把它理一理. this 在非严格模式下,总是指向一个对象,在严格模式下可以是任意值,本文仅考虑非严格模式.记住它总是指向一个对象对于 ...

  6. javascript 面向对象学习(二)——原型与继承

    什么是原型? 首先我们创建一个简单的空对象,再把它打印出来 var example = {} console.log(example) 结果如下: { __proto__: { constructor ...

  7. javascript面向对象(三):非构造函数的继承

    本文来自阮一峰 这个系列的第一部分介绍了"封装",第二部分介绍了使用构造函数实现"继承". 今天是最后一个部分,介绍不使用构造函数实现"继承" ...

  8. javascript面向对象(二):构造函数的继承

    本文来自阮一峰 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有 ...

  9. Javascript面向对象编程:构造函数的继承

    今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有一个"动物"对象的构造函数. function Animal(){ this.species = & ...

随机推荐

  1. sound of the genuine

    “There is something in every one of you that waits and listens for the sound of the genuine in yours ...

  2. AIX 解除镜像再重建同步

    扩展fs发现pv状态变成removed,用chpv -v -a hdisk即可,至于什么原因造成removed? 一.解除vg mirrorunmirrorvg vgname hdiskx hdisk ...

  3. Gym101612H Hidden Supervisors

    题目链接:https://vjudge.net/problem/Gym-101612H 知识点: 贪心 解题思路: 我们称除了以 \(1\) 号结点为根的树以外的树为 “其他树”. 对于每一棵树,先自 ...

  4. 系统对 Device Tree Overlays 的支持方式

    问题来源: 野火 iMX 6ULL 开发板资料. https://tutorial.linux.doc.embedfire.com/zh_CN/latest/linux_basis/fire-conf ...

  5. 1、JavaScript中的Cookie 用于存储 web 页面的用户信息。

    总结:每个浏览器都有一定数量限制的cookie.每个浏览器中,每一个cookie都有一个path路径,指向请求访问的网页. -------------------------------------- ...

  6. Oracle 操作权限

    alter user scott account unlock; 解锁 -- 新建用户create user yym identified by 123456; -- 放开用户权限grant conn ...

  7. 干货!JNPF快速开发平台功能一览

      JNPF,采用主流的两大技术Java/.Net开发,是一套低代码开发平台,可视化开发环境,有拖拽式的代码生成器,灵活的权限配置.SaaS服务,强大的接口对接,随心可变的工作流引擎,一站式开发多端使 ...

  8. DevOps知识点——3C知多少

    CI / CD是任何DevOps操作的两大基石,这是一种开发软件的方式,旨在生产快速而强大的软件,随时以可持续的方式发布更新. 当例行更改代码时,开发周期会更加频繁.更有意义且更快速.通过此过程,我们 ...

  9. Unity 游戏框架搭建 2019 (五十、五十一) 消息机制小结&MonoBehaviourSimplify 是框架?

    我们花了 5 篇文章学习了消息机制的方方面面.并且完成了一个简易消息机制,之后集成到了我们的 MonoBehaviourSimplify 里. 现在 MonoBehaviourSimplify 有一点 ...

  10. [JavaWeb基础] 004.用JSP + SERVLET 进行简单的增加删除修改

    上一次的文章,我们讲解了如何用JAVA访问MySql数据库,对数据进行增加删除修改查询.那么这次我们把具体的页面的数据库操作结合在一起,进行一次简单的学生信息操作案例. 首先我们创建一个专门用于学生管 ...