1 为什么 xx.constructor.prototype 可以访问到当前对象的原型. 'str'.constructor.prototype      'str'.constructor 指向当前对象的构造函数           (构造函数).prototype:即函数的prototype 属性                1 函数有prototype属性,所以可以访问到                2 函数的prototype属性会在创建实例的时候作为实例的原型而存在.      …
Car.prototype = { name:'BMW', height:1400, long:4900 } function Car(color,owner){ this.color = color; this.owner = owner; } var car1 = new Car('red','jim'); console.log(car1.height); console.log(Car.constructor); console.log(Car.prototype); Car为构造函数:…
连看4篇前辈的文章,记录一些知识点 Javascript继承机制的设计思想 Javascript 面向对象编程(一):封装 Javascript面向对象编程(二):构造函数的继承 Javascript面向对象编程(三):非构造函数的继承 1. constructor 在Javascript语言中,new命令后面跟的不是类,而是构造函数(constructor). 创建一个叫Student的构造函数,表示学生对象的原型 function Student(name){ this.name = nam…
prototype属性  任何js函数都可以用作构造函数, 而构造函数需要用到prototype属性, 因此, 每个js函数F(除了ES5的Function.bind()方法返回的函数外) 都自动拥有一个prototype属性. F.prototype的值是一个对象 o , o 默认包含唯一一个不可枚举的属性: constructor , 值默认指回 F,可以修改. 调用 F 构造的对象继承 F.prototype 对象. F.prototype 是类的唯一标识.  当且仅当两个对象继承自同一个…
function Person(name){ this.name = name; } var lilei = new Person("Lilei"); lilei.constructor === Person; // true lilei instanceof Person; // true lilei instanceof lilei.constructor; // true lilei instanceof Person.prototype.constructor; // true…
1.对象:对象是JS的基本数据类型(原始类型(数字.字符串和布尔值),对象类型).对象是一种复合值:它将很多值(原始值或者其他对象)聚合在一起,可通过名字访问这些值. 2.三类JS对象和两类属性: 内置对象:是由ECMAScript规范定义的对象或类.例如,数组(Array).函数(Function).日期(Date)和正则表达式(RegExp)都是内置对象 宿主对象:由JS解释器所嵌入的宿主环境定义的.客户端JS中表示网页结构的HTMLElement对象均是宿主对象,既然宿主环境定义的方法可以…
1.构造函数: 通常构造函数首字母需要大写,主要是为了区别ECMAScript的其它函数.(高程三 P145) 构造函数与其他函数的唯一区别,就在于调用它们的方式不同.只要通过new来调用,任何函数都是构造函数:而任何函数,如果不通过new来调用,那么它和普通函数也没有任何区别.(P146) 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上. (就是一个普通的函数,与其他函数没有任何区别,可…
回想自己已经工作了有一段时间了,但是自己对JavaScript的原型链.和继承的理解能力没有到位,最近他们彻底的整理并且复习了一遍. 本案例中部分文案来自网络和书籍,如有侵权请联系我,我只是把我的理解和想法告诉大家. 本着互联网分享精神.现在我就将我的学习以及理解分享给大家.如果那里又说的不对的地方请私信我,我会及时回复. 创建一个构造函数- 案例一 讲解:很多人见到了久违的new操作符,于是就叫Person为“类”,可是又没有关键字class的出现,觉得叫“类”有点勉强.于是退而求其次叫Per…
作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞懂它们.这里说明一点,__proto__属性的两边是各由两个下划线构成(这里为了方便大家看清,在两下划线之间加入了一个空格:_ _proto_ _).   现在正式开始!让我们从如下一个简单的例子展开讨论,并配以相关的图帮助理解: function Foo() {...};let f1 = new…
众所周知,prototype是一个属性对象,只要创建一个新函数,就会根据特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象.在默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prototype属性所在函数的指针. 需要注意的是,prototype是一个对象,他具体的内部结构是这样的: //创建一个原型对象 function Foo(){}; console.log(typeof Foo.prototype); // '…
① __proto__ 和 constructor 属性是 对象 所独有的. ② prototype 属性是 函数 所独有的. ** JS里函数也是引用类型的对象,所以函数也有 __proto__ 和 constructor 属性 __proto__ 和 原型链 (1)__proto__ 属性都是由一个对象指向一个对象,即指向它们的 原型对象. (2)__proto__ 属性存在的作用:当访问一个对象属性A时,如果当前对象自身内部没有这个属性,就会上溯到__proto__ 属性所指的对象(原型对…
在Javascript不存在类(Class)的概念,javascript中不是基于类的,而是通过构造函数(constructor)和原型链(prototype chains)实现的.但是在ES6中引入了Class(类)这个概念,作为对象的模板.通过class关键字,可以定义类.基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让原型对象的写法更加清晰.更像面向对象编程的语法而已. 1.构造函数的简单介绍 构造函数就是提供了一个生成对象的模…
首先要明确一点,js中的prototype是每个函数创建时(并非执行时,而是函数存在于堆区后)自动创建一个默认对象,这一对象中可以动态的添加属性 在new对象后,可以通过“对象.属性名”的方式直接调用prototype对象中的属性 但是,注意,prototype对象只在函数中存在(函数本身也是一个对象,可以具有属性/方法),通过构造函数创建的对象中不存在原型对象属性,而是存在一个指针,通常被命名为_proto_,这个并不是一个值为原型对象的属性,因此在new的对象中也无法访问. construc…
先画上一个关系图: 1. 什么是prototype.__proto__.constructor? var arr = new Array; 1. __proto__是原型属性,对象特有的属性,是对象指向另外一个对象(就是第二点的原型对象),一般是实例对象的属性,如arr.__proto__ 2. prototype是原型对象,构造函数特有的属性,是构造函数指向的对象,如Array.prototype 其中: arr.__proto__ === Array.prototype; //true 3.…
三者暧昧关系简单整理 在javascript中,prototype.constructor以及__proto__之间有着“著名”的剪不断理还乱的三角关系,楼主就着自己对它们的浅显认识,来粗略地理理以备忘,有不对之处还望斧正. 楼主的一句话理解就是:某个对象的constructor属性返回该对象构造函数,其__proto__属性是个对象,值和其构造函数的prototype属性值一致. 先来说说prototype.prototype的解释是“原型”,js的所有函数都有一个prototype属性,其属…
首先 先解释这三个属性: (1) prototype  : 它是函数独有的,从一个函数指向一个对象(函数的原型),含义是函数的原型对象,也就是这个函数所创建的实例的原型对象.(普通函数的该属性没有作用) 作用:让每一个实例共享同一套方法.(prototype就是用来盛放所有的构造函数的实例的方法的,prototype属性上的所有内容都可以被构造函数的实例去调用) (2) __proto__  : 它是对象独有的,从一个对象指向一个对象.(即指向他们的原型对象,可以理解为父对象) 作用:当访问一个…
关于call与apply的理解容易让人凌乱,这里有个方法可供参考 tiger.call(fox,arg1,arg2...) tiger.apply(fox,[arg1,arg2...]) 理解为 fox入侵者,是狡猾.邪恶的入侵者,乘tiger为难之际(召唤call\apply),成功欺骗tiger可怜的守卫(入口参数),入侵了tiger, 拥有了tiger的一切:财富.老婆.孩子... 可恨.可叹tiger英雄一世,如此落入宵小之手 关于函数对象.对象实例.prototype.Construc…
揭开 constructor 在 Javascript 语言中,constructor 属性是专门为 function 而设计的,它存在于每一个 function 的prototype 属性中.这个 constructor 保存了指向 function 的一个引用. 在定义一个函数(代码如下所示)时, function F() {// some code} JavaScript 内部会执行如下几个动作: 1.为该函数添加一个原形(即 prototype)属性 2. 为 prototype 对象…
javascript原型和原型链是js中的重点也是难点,理论上来说应该是属于面向对象编程的基础知识,那么我们今天为什么要来讲这个呢?(因为我也忘了,最近看资料才揭开面纱……  哈哈哈) 好了,直接进入正文.在js的编程世界中,万物皆对象:不管你是数组还是函数还是对象,都是属于对象类型:那么这么多对象,如何进行管理呢?js中把对象分为实例对象.函数对象.原型对象三大类: 实例对象: 通过构造函数(所谓构造函数我们可以简单理解为进行new操作的函数就是构造函数)所创建的对象都是实例对象: var p…
零.资料与前言 0x1 材料: 1.帮你彻底搞懂JS中的prototype.__proto__与constructor(图解) 0x2 前言 之前也尝试总结过 js 中的 __proto__ . prototype 以及原型链相关的资料(JS 中的原型 -- prototype.__proto__ 以及原型链),不过彼时受限于经验等因素,没有多少条理,同时也存在诸多的的疑点. 学习嘛,就是一个不断推翻自己的过程,本次总结如下: 一.总览 以下例子贯穿全文... function Foo(age)…
proto属性: 所有对象都有此属性.但它不是规范里定义的属性,并不是所有JavaScript运行环境都支持.它指向对象的原型,也就是你说的继承链里的原型.通过Object.getPrototypeOf方法也可以获取对象的原型. prototype属性: 只有函数-准确地说是构造函数-才有此属性,比如Math. pow这样的非构造函数就没有此属性.构造函数是干嘛的?是用来构造(即new)对象的.prototype就是为构造对象这个过程服务的,它指明了构造函数将要创建出来的对象的原型是谁,这样当你…
构造函数 我们知道,ECMAScript5中的Object.Array.Date.RegExp.Function等引用类型都是基于构造函数的,他们本身就是ECMAScript5原生的构造函数.比如,我们可以这样申明一个对象: var person = new Object(); 这里的Object类型的构造函数就是一个名为Object的构造函数,然后通过new来实例化这个构造函数,从而获得一个新的实例对象.同理,Array.Date等其他类型也是一样. 我们又知道,原型对象包含了特定类型的所有实…
首先我们看下面一段代码(第六章 01.htm) function myfun() //定义一个函数myfun { }; console.log(typeof (myfun.prototype)); console.log(typeof (myfun.prototype.constructor)); console.log(myfun.prototype.constructor); 输出的结果分别为 objectfunctionfunction myfun() //定义一个函数myfun { };…
本文正确性有待商榷,高手路过请不吝指教 1.js中只有对象,包括对象,函数,常量等. 对象不用解释.函数也有属性,常见之一就是prototype.常量也有属性: (3).__proto__;//Number {} 2.函数的prototype 函数是一种特殊的对象,它可以直接通过小括号来执行自身代码. 函数还有一个特殊的属性prototype,它也是一个对象. prototype对象也有一个特殊的属性constructor,初始的时候它是指向该函数的. 也就是当js解释到function关键字的…
大家都说JavaScript的属性多,记不过来,各种结构复杂不易了解.确实JS是一门入门快提高难的语言,但是也有其他办法可以辅助记忆.下面就来讨论一下JS的一大难点-对象布局,究竟设计JS这门语言的人当时是怎么做的?设计完之后又变成了什么? 我们来看一张图:  相信大家对这张图都不陌生了,构造函数有一个prototype属性指向其原型.相反原型也有一个constructor指向构造函数.与此同时实例也有一个constructor指向构造函数,这简直就是互相捆绑生怕找不到啊不是吗? 还有一个我们称…
function a(){                 this.name="aaa";             }             function b(){                 this.age=100;             } 我们定义两个function,当我们实例化的对象的时候的操作是这样的 var A=new a(); 1.创建一个对象(有constructor属性及[[Prototype]]属性),根据ECMA,其中[[Prototype]]属…
今天重温了下Javacript,给大家带来一篇Javascript博文,相信对于Javacript有一定了解的人都听过prototype原型这个概念,今天我们深度的分析下prototype与__proto__. 好了,下面看一个非常简单的例子: var Person = function(name) { this.name = name ; }; var p = new Person("Ben"); console.log(p.name); 代码简单的 你不用说明了,如果现在让大家根据…
JavaScript中constructor属性一直不是很清楚,今日终于弄清了其中缘由,下面举例说明. 首先是一个典型的JavaScript实例声明: function Person(){ this.name = name; } var p = new Person('Joe'); console.log(p.constructor === Person); //true console.log(p.__proto__ === Person.prototype); //true 如果此时对Per…
概述 返回一个指向创建了该对象原型的函数引用.需要注意的是,该属性的值是那个函数本身,而不是一个包含函数名称的字符串.对于原始值(如1,true 或 "test"),该属性为只读. 描述 所有对象都会从它的原型上继承一个 constructor 属性: var o = new Object // 或者 o = {} o.constructor == Object var a = new Array // 或者 a = [] a.constructor == Array var n =…
__proto__: 这个属性是实例对象的属性,每个实例对象都有一个__proto__属性,这个属性指向实例化该实例的构造函数的原型对象(prototype). proterty:这个方法是对象的属性.(据说和一个对象的attr类似,比如dom对象中) prototype:每个构造函数都有一个prototype对象,这个对象指向该构造函数的原型. 对象自身属性方法和原型中的属性方法的区别: 对象自身的属性和方法只对该对象有效,而原型链中的属性方法对所有实例有效. 例子: function bas…