连看4篇前辈的文章,记录一些知识点

  1. Javascript继承机制的设计思想

  2. Javascript 面向对象编程(一):封装

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

  4. Javascript面向对象编程(三):非构造函数的继承

1. constructor

在Javascript语言中,new命令后面跟的不是类,而是构造函数(constructor)。

创建一个叫Student的构造函数,表示学生对象的原型

function Student(name){
    this.name = name;
  }

顺便带一下js中this的用法
Javascript 的 this 用法

对这个构造函数使用new,会生成Student的实例

var st1 = new Student("lilei")
console.log(st1.name) // lilei

此时st1 会自动含有一个属性constructor,指向构造函数

console.log(st1.constructor == Student) //true

用构造函数生成实例对象(使用new),有一个缺点,那就是无法共享属性和方法

比如说有同学韩梅梅和同学李雷,他们共同在太阳班

function Student(name){
this.name = name;
this.class = "sun";
}
var st1 = new Student("lilei")
var st2 = new Student("hanmeimei")

输出二人的班级

console.log(st1.class)//sun
console.log(st2.class)//sun

班级改名,修改李雷的班级为月亮班

韩梅梅的班级名称没有发生变化,依然是sun(太阳班)

st1.class = "moon"
console.log(st1.class) //moon
console.log(st2.class) //sun

所以,构造函数中的共有属性无法做到数据共享,要做到数据共享,需要用到prototype

2. prototype

构造函数设置有prototype属性,属性中包含一个对象,需要共享的属性和方法,放在prototype对象里

。不需要共享的属性和方法,放在构造函数里

将上述例子改写

function Student(name){
this.name = name;
}
Student.prototype = {class : "sun"} var st1 = new Student("lilei")
var st2 = new Student("hanmeimei") st1.prototype.class = "moon"
console.log(st1.class) //moon
console.log(st2.class) //moon

每一个实例都有一个constructor属性,默认调用prototype的constructor属性

st1.constructor  = st1.prototype.constructor

总结:


constructor储存不需要共享的属性和方法,而prototype对象储存需要共享的属性和方法

js中prototype,constructor的理解的更多相关文章

  1. 【JavaScript】关于JS中的constructor与prototype

    最初对js中 object.constructor 的认识: 在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下 ...

  2. 【推荐】关于JS中的constructor与prototype【转】

    最初对js中 object.constructor 的认识: 在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下 ...

  3. js中prototype和constructor的认识

    最初对js中 object.constructor 的认识: 我们都知道,在JS中有一个function的东西.一般人们叫它函数.比如下面的代码 function Person(name)    {  ...

  4. js中关于constructor与prototype的理解

    1.①__proto__和constructor属性是对象所独有的:② prototype属性是函数所独有的,因为函数也是一种对象,所以函数也拥有__proto__和constructor属性. 2. ...

  5. 分析js中的constructor 和prototype

    在javascript的使用过程中,constructor 和prototype这两个概念是相当重要的,深入的理解这两个概念对理解js的一些核心概念非常的重要. 我们在定义函数的时候,函数定义的时候函 ...

  6. Js中Prototype、__proto__、Constructor、Object、Function关系介绍

    一. Prototype.__proto__与Object.Function关系介绍 Function.Object:都是Js自带的函数对象.prototype,每一个函数对象都有一个显式的proto ...

  7. 深入分析js中的constructor 和prototype

    在javascript的使用过程中,constructor 和prototype这两个概念是相当重要的,深入的理解这两个概念对理解js的一些核心概念非常的重要. 我们在定义函数的时候,函数定义的时候函 ...

  8. 【转】Js中Prototype、__proto__、Constructor、Object、Function关系介绍

    一    Prototype.__proto__与Object.Function关系介绍        Function.Object:Js自带的函数对象.         prototype,每一个 ...

  9. JS中的constructor与prototype

    http://www.cnblogs.com/qiantuwuliang/archive/2011/01/08/1930548.html 在学习JS的面向对象过程中,一直对constructor与pr ...

随机推荐

  1. 125、Android样式的开发(转载)

    Android样式的开发:drawable汇总篇 http://android.jobbole.com/82117/Android样式的开发:layer-list篇 http://android.jo ...

  2. Hystrix入门与分析(一):初识Hystrix

    在以前的文章中,我们介绍过使用Gauva实现限流的功能,现在我们来了解一下如何在服务框架中实现熔断和降级的方法. 简介Hystrix 大型系统架构的演进基本上都是这样一个方向:从单体应用到分布式架构. ...

  3. Realm 简介

    是一个跨平台的本地数据库,比sqlite 数据库更轻量级,执行效率更高. 官网地址:https://realm.io/docs/java/latest/

  4. Win7局域网内共享文件设置方式

    1.右键-->打开网络和共享中心 2.打开网络和共享中心-->单击更改高级共享设置 3.选中文件(夹)-->属性->共享 4.共享-->添加用户,并赋予相应权限 5.选中 ...

  5. 微信JS-SDK说明文档【申明:来源于网络】

    微信JS-SDK说明文档[申明:来源于网络] 地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html

  6. iOS 调试 crash breakpoint EXC_BAD_ACCESS SIGABRT

    原文地址:iOS 调试 crash breakpoint EXC_BAD_ACCESS SIGABRT作者:流年若离殇 在调试程序的时候,总是碰到crash的bug,而且一追踪就是一些汇编的代码,让人 ...

  7. MySQL慢查询日志总结 日志分析工具mysqldumpslow

    MySQL慢查询日志总结 - 潇湘隐者 - 博客园 https://www.cnblogs.com/kerrycode/p/5593204.html 2016-06-17 10:32 by 潇湘隐者, ...

  8. vue-router 简单使用

  9. linux出现tmp空间满的情况解决

    cd命令tab补全的时候报错: cd /ro-bash: cannot create temp file for here-document: No space left on device-bash ...

  10. JDK 1.8 JVM的变化

    前言: 1.什么是JVM JVM的全称是 Java Virtual Machine(Java虚拟机),它通过模拟一个计算机来达到一个计算机所具有的功能. Java和实体计算机一样也必须有一套合适的指令 ...