深入理解对象 之创建对象

工厂模式:

工厂模式虽然解决了创建\多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)

工厂模式问题:那就是识别问题,因为根本无法 搞清楚他们到底是哪个对象的实例。

构造函数模式

js中可以自定义构造函数,从而自定义对象类型的属性和方法,构造函数本身也是函数,只不过可以用来创建对象

构造函数的问题

每个方法都需要在每个实例上重新创建一遍,但是毫无必要。

可以在全局范围中声明一个函数,然后将引用传递给对象中的函数属性。但是这样做会导致全局函数过多,体现不了对象的封装性

创建自定义的构造函数意味着将来可以将它的实例标识为一种特定的类型;而这正是构造函数模式胜过工厂模式的地方。

原型模式:

每个函数都有一个属性:prototype(原型属性),这个属性是一个指针,指向一个对象,该对象的用途是包含原型模式:

由特定类型的所有实例共享的属性和方法

每个函数都有一个属性:prototype(原型属性),这个属性是一个指针,指向一个对象,该对象的用途是包含可以由特定类型的所有实例共享的属性和方法

原生模式问题:

所有实例在默认情况下都将取得相同的属性值,这种共享对于函数来说非常合适,但是包含引用数据类型的值就不太好(一改都改)

 

组合使用构造函数模式和原型模式

Constructor属性和prototype属性的关系:

创建了自定义的构造函数之后,其原型对象默认会取得constructor属性;当调用构造函数创建一个新实例后,该实例的内部将包含一个指针(内部属性),指向构造函数的原型对象。(指向的是原型对象而不是构造函数)

每个函数都有一个属性:prototype(原型属性),这个属性是一个指针,指向一个(原型)对象,该对象的用途是包含可以由特定类型的所有实例共享的属性和方法

解释:函数里都有prototype属性,指向prototype对象,prototype对象有constructor属性,默认指向原函数,继承之后可以通过修改这些属性的指向来实现继承关系!

附加:

构造函数是一种特殊的函数:

1,可以用普通方式去调用 函数名();

就不会有创建对象等等过程

2,用 new 去调用

new操作符调用构造函数创建对象实际上经历了如下几个步骤

1) 创建一个新对象

2) 将构造函数的作用域赋给新对象(this指向这个新对象)

3) 执行构造函数中的代码

4) 返回新对象。

//new 之后如果是函数的运行( 即 函数名();),优先new操作

new Person('zhangsan').sayName();

//将Person.sayName看做一个整体去使用new,会运行Person.sayName函数里面的东西,同时返回一个新对象,新对象的类型Person.sayName

new Person.sayName();   //先运行方法,再new

day4-1深入理解对象之创建对象的更多相关文章

  1. JS的从理解对象到创建对象

    JavaScript不是一门真正的面向对象语言,因为它连最基本的类的概念都没有,因此它的对象和基于类的语言中的对象也会有所不同.ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值.对 ...

  2. 深入理解JavaScript中创建对象模式的演变(原型)

    深入理解JavaScript中创建对象模式的演变(原型) 创建对象的模式多种多样,但是各种模式又有怎样的利弊呢?有没有一种最为完美的模式呢?下面我将就以下几个方面来分析创建对象的几种模式: Objec ...

  3. openerp经典收藏 深入理解对象(转载)

    深入理解对象(转载) 原文地址:http://shine-it.net/index.php/topic,2159.0.htmlhttp://blog.sina.com.cn/s/blog_57ded9 ...

  4. JavaScript原型模式-理解对象

    一:简述 当初学编程一看到什么什么模式就比较头晕,不过本文我们通过简单的示例代码来说一下js 对象这个话题 ,来看下如何理解这个原型模式. 二:理解对象 1.简单对象 js对象中没有java.C#等类 ...

  5. JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)

    一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...

  6. JS--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)

    一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...

  7. 《JavaScript高级程序设计》第六章【面向对象的程序设计】 包括对象、创建对象、继承

    一.理解对象 二.创建对象      1. 工厂模式      2. 构造函数模式      3. 原型模式      4. 组合使用构造函数模式和原型模式[使用最广泛]      5. 动态原型模式 ...

  8. JavaScript 面向对象的程序设计(一)之理解对象属性

    首先,JavaScript 面向对象的程序设计,主要分三部分. 理解对象属性: 理解并创建对象: 理解继承. 本文主要从第一方面来阐述: 理解对象属性 首先我们来理解Javascript对象是什么?在 ...

  9. 03.JavaScript 面向对象精要--理解对象

    JavaScript 面向对象精要--理解对象 尽管JavaScript里有大量内建引用类型,很可能你还是会频繁的创建自己的对象.JavaScript中的对象是动态的. 一.定义属性 当一个属性第1次 ...

随机推荐

  1. Go计时器

    1. NewTimer package main import ( "time" "fmt" ) func main() { /* 1. func NewTim ...

  2. SQL基础语法—create语句

    1 Create database语句 create database 语句是在MySQL实例上创建一个指定名的数据库,create schema语句的语义和create database是一样的.先 ...

  3. 解密国内BAT等大厂前端技术体系-美团点评之上篇(长文建议收藏)

    引言 进入2019年,大前端技术生态似乎进入到了一个相对稳定的环境,React在2013年发布至今已经6年时间了,Vue 1.0在2015年发布,至今也有4年时间了. 整个业界在前端框架不断迭代中,也 ...

  4. 8.5-Day1T1--Asm.Def 谈笑风生

    题目大意 m个操作, 1:添加一个字符串 2:查询字符串s是否被添加过(中至多包含一个通配符“*”) 题解 trie树可以得部分分 用map映射 '*'就枚举26个英文字母来判断就可以了 #inclu ...

  5. 安卓开发:图片的显示Mode

    安卓开发中将图片放置在ImageView中展示,涉及到图片显示的模式,跟iOS开发中UIView的contentMode属性是一个意思,在安卓UI元素中使用的属性是scaleType,其中枚举值的效果 ...

  6. localhost: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

    在开启hadoop时候报错:localhost: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 此时 ssh ...

  7. [Linux kali] linux kali [KDE]一些软件切换输入法无效

    #开始 今天最终是在实体机安装了Kali Kali的默认桌面是GNOME桌面 但是用久了windows桌面用这个实在是不习惯 然后看到了kali有自带KDE版本的 然后就下载了一个尝尝鲜 之前在Deb ...

  8. 一个Log-Tan积分

    \[\Large\int_{0}^{\pi }\theta \ln\tan\frac{\theta }{2}\mathrm{d}\theta \] \(\Large\mathbf{Solution:} ...

  9. Go语言基础之runtime包

    文章引用自 Golang中runtime的使用 runtime调度器是非常有用的东西,关于runtime包几个方法: Gosched:让当前线程让出cpu以让其他线程运行,它不会挂起当前线程,因此当前 ...

  10. input file multiple 配合springmvc实现多文件上传

    .前端页面的样子 <input id="file" name="file" type="file" multiple="mu ...