js中prototype,constructor的理解
连看4篇前辈的文章,记录一些知识点
Javascript继承机制的设计思想
Javascript 面向对象编程(一):封装
Javascript面向对象编程(二):构造函数的继承
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对象储存需要共享的属性和方法
转载于:https://www.cnblogs.com/gggggggxin/p/10070496.html
js中prototype,constructor的理解相关推荐
- 关于JS中的constructor与prototype
在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下: 我们都知道,在JS中有一个function的东西.一般人们 ...
- 【推荐】关于JS中的constructor与prototype【转】
最初对js中 object.constructor 的认识: 在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下 ...
- javascript --- js中prototype、__proto__、[[Propto]]、constructor的关系
首先看下面一行代码: function Person(name){this.name = name; } var person1 = new Person; console.log(person1._ ...
- JS中Prototype属性解释及常用方法
1.prototype的定义 javascript中的每个类都有prototype属性,其prototype属性的解释是:返回对象类型原型的引用.每一个构造函数都有一个属性叫做原型.这个属性非常有用: ...
- js中prototype用法(转)
JavaScript能够实现的面向对象的特征有: ·公有属性(public field) ·公有方法(public Method) ·私有属性(private field) ·私有方法(private ...
- Js中函数式编程的理解
函数式编程的理解 函数式编程是一种编程范式,可以理解为是利用函数把运算过程封装起来,通过组合各种函数来计算结果.函数式编程与命令式编程最大的不同其实在于,函数式编程关心数据的映射,命令式编程关心解决问 ...
- JS中prototype、__proto__以及原型链
1.对象的三角恋关系 1.每个"构造函数"中都有一个默认的属性, 叫做prototype prototype属性保存着一个对象, 这个 对象 称之为"原型对象" ...
- Js中匿名函数的理解
目录 1.js中匿名函数的N种写法 最常见的用法: 2.JavaScript 匿名函数及闭包 2.1 匿名函数 2.1.1 函数的定义 2.1.2 匿名函数的创建 2.2 闭包 2.3 举例 2.4 ...
- JS中prototype的理解
1,JS是基于对象的语言,构造函数本身就是一个对象,当调用new关键字时,会创建一个新对象.2,prototype是对象的一个属性,其可以是一个基本类型,如数字.字符串等,也可以是一个引用类型. 3, ...
最新文章
- 删除json中的指定元素_DeleteFile,VBA中借助Windows Scripting Host删除指定文件
- struts2文件上传(2)
- matlab光学毕业论文,光学信息处理实验的Matlab仿真.doc
- 几个问题,比较急,知道的大侠,帮帮忙
- 荣耀鸿蒙os2.0公测版,鸿蒙OS 2.0他来了!华为HarmonyOS 2.0开发者公测版正式推送
- 构建最小JDK Docker镜像 或者直接使用镜像:frolvlad/alpine-oraclejre8:slim
- 6、vueJs基础知识06
- 00110_Class类
- 自动驾驶7-2 最终项目概述 Final Project Overview
- s7-200与计算机modbus通讯案例,S7-200实现Modbus通信范例(绝对精华)
- el-table点击单元格自动聚焦可编辑,且失去焦点即修改成功的实现方法
- 关于Windows的window
- 关于移动端适配,你必须要知道的
- Storyboard 之segue用法总结
- Cesium中文教程-空间数据可视化Visualizing Spatial Data(二)
- 咸鱼Micropython—LED用法
- 2023年软考高级信息系统项目管理师报名,这里靠谱
- MFC 创建模态与非模态对话框
- 我们研究了853场世界杯比赛,发现了这几条稳赔不赚的竞猜攻略
- 机器学习练习 2 - 逻辑回归