一、js中的原型
创建(声明)一个函数,浏览器在内存中会创建一个对象。
每个函数都默认会有一个属性prototype指向了这个对象,就是说prototype的属性的值就是这个对象。
此对象就是该函数的原型对象,简称函数的原型。
这个原型也默认有一个属性constructor指向了这个函数,就是说constructor属性的值是该函数。

原型对象主要作用是继承

二、构造函数
当用new创建对象时,这个对象会存在一个默认不可见的属性去指向构造函数的原型对象;
这个属性用prototype表示,并且没办法直接访问到。

function Person () {} // 构造函数

Person.prototype.name = "zhangsan"; // 添加属性
Person.prototype.callName = function () { // 添加方法
  console.log(this.name);
}

var p1 = new Person(); // p1虽然使用Person的构造函数,但是已经和他没关系了
console.log(p1.name); --> zhangsan // 能取到值
p1.callName() --> zhangsan

p1.name = "lisi"; // 可以修改,但是不能修改到prototype,也再也取不到之前的值了
console.log(p1.name); --> lisi
p1.callName() --> lisi

console.log(Person.name); --> zhangsan
Person.callName() --> zhangsan

var p2 = new Person(); // p1 p2 两个没关系,互不干扰;他们都是Person的实例,都有constructor属性,指向的都是Person

三、相关的属性
1)prototype
存在于构造函数(其他函数中也存在,只是不关注)指向构造函数的原型对象。

2)constructor
存在原型对象中,指向的是这个构造函数。
Person.prototype.constructor === Person --> true

如果给给原型增加对象字面量,
Person.prototype = {
  name: "zhangsan",
  age: 20
}
那么constructor将不再指向该构造函数。
Person.prototype.constructor === Person --> false

如果你非要constructor指向你的构造函数呢,那么应该在原型中增加constructor的指向,如
Person.prototype = {
  constructor : Person //让constructor重新指向Person函数
}

3)_proto_
之前说到prototype是不可访问的,但是在个别浏览器(Chrome和Firefox,IE不支持)中是提供访问方式的;
但是尽量不要用,因为会改变这个对象的继承原型链。

4)hasOwnProperty()
判断属性是否是自己添加的返回true,如果是原型中或者没有这个属性那么返回false

5)in
判断属性是否存在这个对象中,先在该对象中找,再去原型找,找不到才返回false

对js原型及构造函数的相关理解的更多相关文章

  1. js原型和构造函数

    前言 从应用层面深入理解原型模式和js中的构造函数. 构造函数(constructor) js中的任何对象都有自己的构造函数.js中使用字面量声明的普通对象({})或数组([])等子对象本质上都是使用 ...

  2. js原型和构造函数混合模式

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

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

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

  4. Js中关于构造函数,原型,原型链深入理解

    在 ES6之前,在Javascript不存在类(Class)的概念,javascript中不是基于类的,而是通过构造函数(constructor)和原型链(prototype chains)实现的.但 ...

  5. JS原型、原型链、构造函数、实例与继承

    https://cloud.tencent.com/developer/article/1408283 https://cloud.tencent.com/developer/article/1195 ...

  6. 简单粗暴地理解js原型链--js面向对象编程

    原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧, ...

  7. JS原型的剖析与理解

    原型相关的概念 关于面向对象的概念 类 class 在js中就是构造函数 在传统的面向对象语言中,使用一个叫类的东西定义模版,然后使用模版创建对象 在构造方法中也具有类似的功能,因此称其为类 实例与对 ...

  8. 深入理解JS原型链与继承

    我 觉得阅读精彩的文章是提升自己最快的方法,而且我发现人在不同阶段看待同样的东西都会有不同的收获,有一天你看到一本好书或者好的文章,请记得收藏起来, 隔断时间再去看看,我想应该会有很大的收获.其实今天 ...

  9. 个人对JS原型链的一些理解(prototype、__proto__)

    前言 在我一开始学习java web的时候,对JS就一直抱着一种只是简单用用的心态,于是并没有一步一步地去学习,当时认为用法与java类似,但是在实际web项目中使用时却比较麻烦,便直接粗略了解后开始 ...

随机推荐

  1. 利用SUM打java补丁

    Upgrade Single JAVA Component Patch Level Using SUM Tool Hi Friends, I came across few posts/threads ...

  2. Disconnected from the target VM, address: '127.0.0.1:57178', transport: 'socket'

    idea 执行测试单元debug时控制台出现:Disconnected from the target VM, address: '127.0.0.1:57178', transport: 'sock ...

  3. JavaScript代理模式

    代理模式的定义,代理是一个对象(proxy)用它来控制目标对象的访问.为此他要是先与目标对象相同的接口,但是他不同于装饰者模式,它对目标对象不进行任何修改,它的目的在于延缓"复杂" ...

  4. js基本知识

    1.js中的数据类型: js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型. 2.typeof 返回的是字符串,有 ...

  5. JEECG 上传插件升级-标签

    前言: 现有的uploadify上传是基于swf的,随着H5的普及,flash即将退出历史舞台,JEECG团队本着与时俱进的原则,将全面升级JEECG系统中的上传功能,采用新式上传插件plupload ...

  6. ReactiveX 学习笔记(27)使用 RxJS + Vue.js 进行 GUI 编程

    课题 程序界面由3个文本编辑框和1个文本标签组成. 要求文本标签实时显示3个文本编辑框所输入的数字之和. 文本编辑框输入的不是合法数字时,将其值视为0. 3个文本编辑框的初值分别为1,2,3. 创建工 ...

  7. 逆变(contravariant)与协变(covariant):只能用在接口和委托上面

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. 企业架构设计之IFW实践回顾

    前言 笔者几年前曾参与过一套网络银行的系统建设以及后续这套系统在信用.云服务.保险.基金.支付等领域的复用,使用了IFW模型的变体.当时仅仅是根据架构师的设计进行编码.测试和交付以及后续的维护,没有对 ...

  9. .net Cache 需要注意的地方

    CacheItemPolicy policy = new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(ti ...

  10. 无分类编址(CIDR,Class Inter-Domain-Routing)

    CIDR全称是无分类域间路由选择,英文全称是Classless Inter-Domain Routing,大家多称之为无分类编址 CIDR的特点 (1)CIDR消除了传统的A类.B类和C类地址以及划分 ...