js中prototype,constructor的理解
连看4篇前辈的文章,记录一些知识点
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的理解的更多相关文章
- 【JavaScript】关于JS中的constructor与prototype
最初对js中 object.constructor 的认识: 在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下 ...
- 【推荐】关于JS中的constructor与prototype【转】
最初对js中 object.constructor 的认识: 在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下 ...
- js中prototype和constructor的认识
最初对js中 object.constructor 的认识: 我们都知道,在JS中有一个function的东西.一般人们叫它函数.比如下面的代码 function Person(name) { ...
- js中关于constructor与prototype的理解
1.①__proto__和constructor属性是对象所独有的:② prototype属性是函数所独有的,因为函数也是一种对象,所以函数也拥有__proto__和constructor属性. 2. ...
- 分析js中的constructor 和prototype
在javascript的使用过程中,constructor 和prototype这两个概念是相当重要的,深入的理解这两个概念对理解js的一些核心概念非常的重要. 我们在定义函数的时候,函数定义的时候函 ...
- Js中Prototype、__proto__、Constructor、Object、Function关系介绍
一. Prototype.__proto__与Object.Function关系介绍 Function.Object:都是Js自带的函数对象.prototype,每一个函数对象都有一个显式的proto ...
- 深入分析js中的constructor 和prototype
在javascript的使用过程中,constructor 和prototype这两个概念是相当重要的,深入的理解这两个概念对理解js的一些核心概念非常的重要. 我们在定义函数的时候,函数定义的时候函 ...
- 【转】Js中Prototype、__proto__、Constructor、Object、Function关系介绍
一 Prototype.__proto__与Object.Function关系介绍 Function.Object:Js自带的函数对象. prototype,每一个 ...
- JS中的constructor与prototype
http://www.cnblogs.com/qiantuwuliang/archive/2011/01/08/1930548.html 在学习JS的面向对象过程中,一直对constructor与pr ...
随机推荐
- Qt编写自定义控件8-动画按钮组控件
前言 动画按钮组控件可以用来当做各种漂亮的导航条用,既可以设置成顶部底部+左侧右侧,还自带精美的滑动效果,还可以设置悬停滑动等各种颜色,原创作者雨田哥(QQ:3246214072),驰骋Qt控件界多年 ...
- linux/nginx命令
1.ps查看服务器所有的进程: -aux 显示所有状态 -ef 简洁信息 ps -aux | grep node 第二列是pid,杀掉程序使用kill. ps -ef | grep node 第一列是 ...
- js---根据指定的顺序进行排序
有一个数据列表,我需要根据根据ID依次来取里面的第9,3,8,4项,具体的实现方法. var arr = [ {id:1,title:'我是第一个'}, {id:2,title:'我是第二个'}, { ...
- spring和jdbctemplate
1.spring与jdbc整合应用 a.增删改 -获取connection -获取statement -设置sql中?参数 -执行sql操作 -释放connection b.查询 -获取connect ...
- VUEX新笔记
$store.commit('abc'),const mutations={abc:(state)=>{ state.flag='mutations' }} 多个mutations时用到dist ...
- MySQL建表、插入语句等
不定时更新MySQL的一些基础语句以及出现过的问题 5.10 建表语句 CREATE TABLE `policy_landvalue` ( `id` ) NOT NULL AUTO_INCREMENT ...
- Linux命令 umask
umask: 文件预设权限 指定当前用户在创建文件或目录时的权限默认值. $ umask0002$ umask -Su=rwx,g=rwx,o=rx 创建文件时,预设没有x 权限,即只有rw 权限,最 ...
- Eclipse 02: 安装spring tool suite插件
在实际项目开发时,如果我们创建了一个spring文件,其实也就是个xml文件,如果没有集成spring的开发工具,创建的就是一个单纯的xml文件.安装spring插件以后创建spring配置文件会方便 ...
- MySQL优化小结
数据库的配置是基础.SQL优化最重要(贯穿始终,每日必做),由图可知,越往上优化的面越小,最基本的SQL优化是最重要的,往上各个参数也没太多调的,也不可能说调一个innodb参数性能就会好多少,而动不 ...
- fiddler的一些记录
通过execaction.exe可以给fiddler发命令,控制抓包开始和停止 https://stackoverflow.com/questions/29916508/start-and-stop- ...