对原型链的分析

javascript高级程序设计里有一段代码,我这里对它进行分析下。

我们一条一条讲

new实际上是在内存空间创建了一个对象{},但是这个对象我们不知道它叫什么名字,它在哪里,new后面接上一个函数的执行,这表示什么,表示的是在刚才它创建的这个对象,也就是实例化的那个对象,给它加上了一个属性property,那么这个实例化后的对象{}和SuperType这个函数是什么关系,它其实只是一个函数,一个普通函数而已。我只是通过你这个函数的执行,实例化出一个无名的对象{}。但是,这个函数它其实也是一个对象,因为它是Function的实例,所谓实例也就是new出来的,既然new出来的,就和刚刚创建出来的那个对象是一样的,也就说明了这个函数是一个对象。既然实例化了SuperType这个对象。那么我这个无名的对象就可以调用这个名字叫SuperType的变量所指向的另一个无名对象的属性以及这个对象所指向的Function、Function.prototype所具有的属性。

所以总结几点,1.new代表的是创建一个无名对象,

2.new 空格 一个函数的执行,改怎么理解,这样:new.这个函数的执行。也就是说,new创建的这个无名对象调用了这个函数,那么这个函数里的this就是指向这个new出来的无名对象。

3.一个变量=new 空格 一个函数的执行,是什么意思,意思就是说,一个变量指向了这个无名函数,意思就是给这个无名函数取名字了。

这样以来,真个原型链就好理解了。所以归根到底还是不知道new是干嘛的。很多资料里都没有提及,所以很多人不是很理解原型链这一块。

时间: 2024-10-16 02:15:14

对原型链的分析的相关文章

Js创建对象的方法及原型链的分析

一.JS创建对象的几种方式 最近在看javascript高级程序设计,其中对对象的创建做了具体的阐述,可以进行总结一下. 第1种模式:工厂方式 var sayHello=function(){ return "Hello"; }; function student(){ var S1 = new Object(); Child.name="小明"; Child.age="18"; Child.sayHello=sayHello; return s

图解JavaScript中的原型链

转自:http://www.jianshu.com/p/a81692ad5b5d typeof obj 和 obj instanceof Type 在JavaScript中,我们经常用typeof obj和obj instanceof Type来识别类型,那么两者的区别在哪?先来看两段代码 <!--typeof obj的方式判断--> <script>    var str = "toby";    console.log(typeof str);// stri

javascript 原型、原型链、对象复制等原理和示例分析(下)

原型 原型是 JavaScript 面向对象特性中重要的概念,也是大家太熟悉的概念.因为在绝大多 数的面向对象语言中,对象是基于类的(例如 Java 和 C++ ) ,对象是类实例化的结果.而在 JavaScript 语言中,没有类的概念 ① ,对象由对象实例化.打个比方来说,基于类的语言中类 就像一个模具,对象由这个模具浇注产生,而基于原型的语言中,原型就好像是一件艺术品 的原件,我们通过一台 100% 精确的机器把这个原件复制出很多份. 前面小节的例子中都没有涉及原型,仅仅通过构造函数和 n

原型分析于原型链

原型分析 1.        每个函数数据类型(普通函数,类)都有一个prototype属性,并且这个属性是一个对象数据类型. 2.        每一个prototype上都有一个constructor属性,并且这个属性值是当前函数或类本身 3.每一个对象数据类型(实例,普通对象,prototype)都天生具有一个__proto__属性,他的属性值是当前实例所属类的原型 通过图像我们知道 zhang.__proto__==Person.prototype   true 原型链 Duixiang

深入理解JavaScript原型链

前言 最近碰到一个题,大家可以试下. Object.prototype.a = function() { console.log("aaa "+this.name); }; Function.prototype.b = function() { console.log("bbb "+this.name); }; function Person(name) { this.name = name; } var person = new Person("Chin

关于JS的原型链和作用域链

最近在看<Javascript高级程序设计第三版>,用了两周把前七章磕磕绊绊的读完了,也阅读了许多大牛们写的博客,对JS的理解有了很大的提高,不过要将这么多的知识全部融会贯通还有还需要多多练习,加深自己的理解,今天就将自己迷糊的几个地方列出来写写自己的理解,新手小白,如有错误欢迎大家指正(: 1.原型链和作用域链的概念模糊 这个问题可能有人觉得很无厘头,不过确实在我学习过程中突然出现而且让我产生很大的困扰,觉得是不是之前自己的理解就出现很大的问题.出现这个问题的原因是第七章函数表达式,原先在单

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

简单粗暴地理解js原型链--js面向对象编程 原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧,想点与代码无关的事,比如人.妖以及人妖. 1)人是人他妈生的,妖是妖他妈生的.人和妖都是对象实例,而人他妈和妖他妈就是原型.原型也是对象,叫原型对象. 2)人他妈和人他爸啪啪啪能生出一堆人宝宝.妖他妈和妖他爸啪啪啪能生出一堆妖宝宝,啪啪啪就是构造函数,俗

面向对象之笔记三-------------- 原型链

复习 -> 继承 原型式继承 function Person() {} Person.prototype = 父对象; var p = new Person(); p 继承自 父对象 混入 ( mix, extend ) function extend( o1, o2 ) { for ( var k in o2 ) { o1[ k ] = o2[ k ]; } } 注意命名规则: 1> 一般 将一个对象混入另一个对象, 使用 mix 2> 如果是当前对象的方法. 是将另一个对象混入当前对

javascript中的原型与原型链

javascript是一门面向对象的语言,但它却没有像其他面向对象的语言(如java,C++)有类的概念,也没有基于类的继承体系.但是它有自己独特的继承方式,那就是基于原型和原型链的继承. 当我们创建一个对象时,每个对象在生成之后都有一个隐式的属性__proto__(非规范,暂且这么叫吧),该属性指向该实例的原型对象,并共享其原型对象上的属性和方法. 下面分析下不同创建对象的方式所对应的__proto__属性指向的不同. 1.用对象字面量创建对象. var a={x:1}; console.lo