JS是面向对象的语言,函数也是对象。下面大致介绍下实例,原型与构造函数之间的关系。

构造函数模式

function Person(name,age){

  this.name = name;

  this.age = age;

  this.sayname = function(){

    alert(this.name);  

  }

}

定义构造函数,函数名字首字母大写,并使用new操作符实例化构造函数。构造函数本身也是函数,只不过可以用来创建对象。构造函数的特点是:

1.没有显式的创建对象

2.将属性和方法赋给力this对象

3.没有return语句

实现步骤为:

1.创建一个新对象

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

3.执行构造函数的代码,给构造函数添加属性和方法

4.返回新对象

构造函数的主要问题是,每个方法都要在每个实例上创建一遍。

原型模式

每个函数都有一个prototype属性,这是一个指向其原型对象的指针。原型对象的好处就是可以让对象实例共享其原型对象中的属性和方法。

原型对象中的constructor属性指向其构造函数。构造函数的prototype指向其原型对象。如果使用对象字面量重写构造函数时,记得指定constructor属性,否则constructor会指向object.

实例

new构造函数就可以创建该构造函数的实例,实例对象中的__proto__指向其构造函数对应的原型对象。

构造函数的prototype指向其原型对象,原型对象的constructor指向其构造函数,使用new关键字实例化构造函数,实例化对象的__proto__指向其原始的原型对象。

创建自定义对象的有效方式就是组合使用构造函数模式和原型模式。构造函数模式定义实例属性,原型模式定义方法和公用的属性。这样每个实例都有自己自定义的属性,同时又共享着对方法的引用,最大成本的节省内存。

相关操作符

delete操作符:删除实例中的指定属性。从而可以访问原型中同名的属性。

hasOwnProperty()方法:检测一个属性是存在于该对象的实例中,属于实例属性时,才返回true,否则属于原型属性,则返回false。

in操作符:

  单独使用时,如果该对象中存在这个属性,则返回true,不管这个属性是实例属性还是原型属性。name in object

  使用for-in循环时,返回的是该对象可枚举的所有属性。

每个构造函数都有一个原型对象,原型对象包含一个指向构造函数的指针(constructor),而实例都包含一个指向原型对象的内部指针(__pro__)。

JS 之原型,实例,构造函数之间的关系的更多相关文章

  1. JS高级---实例对象和构造函数之间的关系

    实例对象和构造函数之间的关系:   1. 实例对象是通过构造函数来创建的---创建的过程叫实例化   2. 如何判断对象是不是这个数据类型?    1) 通过构造器的方式 实例对象.构造器==构造函数 ...

  2. JavaScript中的 原型 property 构造函数 和实例对象之间的关系

    1 为什么要使用原型? /* * javascript当中 原型 prototype 对象 * * */ //首先引入 prototype的意义,为什么要使用这个对象 //先来写一个构造函数的面向对象 ...

  3. 一篇文章理解JS继承——原型链/构造函数/组合/原型式/寄生式/寄生组合/Class extends

    说实在话,以前我只需要知道"寄生组合继承"是最好的,有个祖传代码模版用就行.最近因为一些事情,几个星期以来一直心心念念想整理出来.本文以<JavaScript高级程序设计&g ...

  4. JS继承,原型继承,构造函数的继承,非构造函数"的继承

    a.原型继承 一.new运算符的缺点 用构造函数生成实例对象,有一个缺点,那就是无法共享属性和方法.比如,在DOG对象的构造函数中,设置一个实例对象的共有属性species. function DOG ...

  5. JS中BOM和DOM之间的关系

    一.Javascript组成JavaScript的实现包括以下3个部分:1.核心(ECMAScript):描述了JS的语法和基本对象.2.文档对象模型 (DOM):处理网页内容的方法和接口.3.浏览器 ...

  6. js、jq、ajax之间的关系

    一句话:js是一种客户端脚本语言,jq是在js基础上封装起来的一个开发工具,ajax是基于js的一种技术(异步刷新). javascript是一种在客户端执行的脚本语言,用来给网页添加动态功能,使网页 ...

  7. js面向对象程序设计之构造函数

    再上一篇的开头说了创建对象的两种方式,一种是Object构造函数的方式,一种是对象字面量的方法.但这些方式创建多个对象的时候都会产生大量的重复代码.经过技术的进步也演化出来许多的创建对象的模式.本章会 ...

  8. Javascript 构造函数、原型对象、实例之间的关系

    # Javascript 构造函数.原型对象.实例之间的关系 # 创建对象的方式 # 1.new object() 缺点:创建多个对象困难 var hero = new Object(); // 空对 ...

  9. Js面向对象原型~构造函数

    脑袋一团浆糊,但希望写点啥,所有就有了这篇博文了,抱歉哦....开始吧!!!!  什么是构造函数??   所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造 ...

随机推荐

  1. Java眼中的XML--文件读取--1 应用DOM方式解析XML

    初次邂逅XML: 需要解析的XML文件: 这里有两个book子节点. 1.如何进行XML文件解析前的准备工作,另外解析先获取book节点. 这个我后来看懂了: 这个Node的ELEMENT_NODE= ...

  2. 8 Regular Expressions You Should Know

    Regular expressions are a language of their own. When you learn a new programming language, they're ...

  3. Peer-to-Peer 综述

    Peer-To-Peer 网络介绍 最近几年,Peer-to-Peer (对等计算,简称P2P) 迅速成为计算机界关注的热门话题之一,财富杂志更将P2P列为影响Internet未来的四项科技之一. “ ...

  4. C# 3个线程A B C 依次打印123123123..

    C#经典面试题: 有3个线程,A线程打印1,B线程打印2,C线程打印3,请用程序实现依次打印123123123... class Program { static void Main(string[] ...

  5. Mongodb在Windows上的配置

    1.打开mongodb的官网:https://www.mongodb.org/进行下载相应平台的安装包 2.我们选择最新版的3.2版本来下载,选择对应的操作系统版本来下载,这里选择windows Mo ...

  6. (ios实战)ios调试总结(转载)

    在程序中,无论是你想弄清楚为什么数组中有3个对象而不是5个,或者为什么一个新的玩家开始之后,游戏在倒退——调试在这些处理过程中是比较重要的一部分.通过本文的学习,我们将知道在程序中,可以使用的大多数重 ...

  7. 【mysql】添加对emoji的支持

    1.简介 涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集,避免 emoji 表情符号带来的问题 MySQL Server >  5.5.3 2.配置+升级 当前配置 m ...

  8. CBarChart柱形图类

    在用VC做有关图表的时候,感觉不是那么方便,在codeproject找到一个柱形图的实用类,原文地址为:http://www.codeproject.com/KB/miscctrl/CBarChart ...

  9. Linux安装SmartSVN及破解

    转载自:linux 下svn图形客户端smartsvn 安装 一.准备         smartsvn需要java支持,首先请确认机器上有没有安装java 另外还请确认环境变量里有没有JAVA_HO ...

  10. 在Mac 系统上安装密码生成器

    1.打开终端 2.输入 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/ins ...