js new都做了什么 prototype __proto__

现在对自己之前理解的东西,总结下,整理到这,看我那会画的一张图,我都不知道在说什么,那会的瞬间都疏通的感觉,现在基本都模糊了,我这脑子真是。。。

言归正传 开始:

一:思考new都做了什么,下面一个例子 

function A (){
        var a1=111;
        this.a2=222;
        function fa(){
            console.log(a1);
        }
        fa();
    }
A.prototype.a3="333";
var b = new A();

  new一个构造函数,

  1:会先新建一个对象,比如 var o={};

  2:然后o对象的__proto__=A函数的prototype,

  3:以o为执行环境执行A,A.apply(o,[arg])

    apply是什么,就是执行时,改变执行上下文,把A执行环境中的this 变成o,

    看到很多地方说,apply与call的区别,我认为区别就是他们两个传参不同,apply是数组形式 :apply(obj,argument)argment是一个数组,call直接是值形式 :call(obj,name,age)

  4:看A函数返回值的情况,然后b是什么,针对上一个的例子,b指向 {a2:222} ,里面的__proto__ ,constructor等一会说 

 

        文章中黄色部分不大理解,按说他是系统生成的o对象,但是他为什么是A{}?

    现在来看a方法返回值的各种情况的列子,来看b是什么

    1:什么不返回的情况 

    

    2:返回 数据类型的情况

      

    3:返回 引用类型的情况

    

   总结,当new一个函数时,如果函数有返回,如果是数据类型,直接忽视,返回系统生成的对象,如果返回的复杂数据类型,那么就是复杂数据类型,如果没有返回,就是系统生成的对象

二 prototype

  每个函数都有prototype(原型)属性,他的值是对象(属性集合)

  

  只有一个constructor 属性,指向本身,既然他的值是对象,包括constructor和__proto__属性,同时可以自定义属性,例如:

  

三:__proto__

  __proto__是隐形属性,每个对象都有这个属性,实例化对象的__proto__值是指向该对象的prototype

  

 四:自定函数 对象 Object Function他们之间prototype __proto__的联系

  注意自定义函数b的prototype属性集合中的__proto__,或是说整个prototype是对象,他的__proto__,指向的是最底层的Object对象,如果下面这种new的情况,

var a = function() { this.a1="a";};
var b = function() { this.b1="b";};
var c = function() { this.c1="c";};
b.prototype = new a();
c.prototype = new b();

b.prototype={a1:"a"};

b.prototype.__proto__=a.prototype ,a.prototype的值 是constructor 和__proto__(指向的是最底层的Object{}),

c.prototype={b1:"b"};

c.prototype.__proto__=b.prototype ——》指向{a1:"a"};

不知道有没有理解不对的地方啊啊啊啊啊。。。。

时间: 2024-10-09 22:02:20

js new都做了什么 prototype __proto__的相关文章

理解js中的原型链,prototype与__proto__的关系

说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script type="text/javascript"> 2 var Person = function () { }; 3 var p = new Person(); 4 </script> 很简单的一段代码,我们来看看这个new究竟做了什么?我们可以把new的过程拆分成以下三步: <1> var p={}; 也就是说,初始化一个对象p. <2>

prototype &amp; __proto__

[普通对象 vs 函数对象] js中对象分为两类,普通对象.函数对象.当在终端打印时,普通对象与函数对象有极其明显的差异. 一个不含杂七杂八的函数对象如下,这是第一种表现形式.: 若往里面塞东西,则会显示成下面这样.这是第二种表现形式,特点是[]别扭地紧跟在{右侧.: 一个普通对象有如下两种形式: 普通对象无法通过()来调用,函数对象可以通过()来调用,这是重大区别. [内置数据剖析] js引擎内部有一个函数对象,这里称为BaseFunction,以及一个空对象,这里称为Root. BaseFu

关于JS中原型链中的prototype与_proto_的个人理解与详细总结(代码示例+高清无码大图!——自备瓜子花生)

一直认为原型链太过复杂,尤其看过某图后被绕晕了一整子,今天清理硬盘空间(渣电脑),偶然又看到这图,勾起了点回忆,于是索性复习一下原型链相关的内容,表达能力欠缺逻辑混乱别见怪(为了防止新人__(此处指我)__被在此绕晕,图片就放在末尾了.) 以下三点需要谨记 1.每个对象都具有一个名为__proto__的属性: 2.每个构造函数(构造函数标准为大写开头,如Function(),Object()等等JS中自带的构造函数,以及自己创建的)都具有一个名为prototype的方法(注意:既然是方法,那么就

prototype __proto__ Function

我们创建的每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象.(注意:是函数才有prototype属性) 而__proto__属性每一个对象都有. 在js中如果A对象是由B函数构造的,那么A.__proto__ === B.prototype 所以: (1).__proto__ === Number.prototype//true http://blog.csdn.net/aitangyong/article/details/44837655 结论1:Object.prot

Object.prototype.__proto__ 、Object.prototype和 Object.prototype.constructor

Object.prototype.__proto__: 实体对象指向造它的构造函数的 prototype属性所指 的对象 ,实例的__proto__是引用构造函数的prototype属性所指对象, Object.prototype : js规定,构造函数有prototype 属性,指向一个对象,这个对象一般就是构造函数的公有成员. 所以 __proto__  和 prototype 可以指向同一个对象  {key1:value1,key2:value2,......},构造函数的私有和特权函数会

js继承之call,apply和prototype随谈

在js中,call,apply和prototype都可以实现对象的继承,下面我们看一个例子: function FatherObj1() { this.sayhello = "I am join"; this.show = function () { alert("I am FatherObj1"); }; this.getall = function () { if (arguments) alert("GetAll:" + arguments

instanceof,Object.getPrototypeOf(),Object.create(),Object.setPrototypeOf(),Object.prototype.isPrototypeOf(),Object.prototype.__proto__

一.instanceof instanceof运算符返回一个布尔值,表示指定对象是否为某个构造函数的实例 var v = new Vehicle(); v instanceof Vehicle // true instanceof对整个原型链上的对象都有效,因此同一个实例对象,可能会对多个构造函数都返回true var d = new Date(); d instanceof Date // true d instanceof Object // true 利用instanceof运算符,还可以

scikit-learn:CountVectorizer提取tf都做了什么

http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html#sklearn.feature_extraction.text.CountVectorizer class sklearn.feature_extraction.text.CountVectorizer(input=u'content', encoding=u'utf-8', decode_er

对象初始化都做了什么

Java中对象的初始化都做了些什么,以Person p = new Person("张三",20)为例 一.Person p 1.首先会把编译后的Person.class文件加载内存中 2.在栈内存中为类Person的引用p开辟空间 3.如果Person中有静态的成员,则会先把静态的变量和方法加载到方法区中的静态方法区 二.new Person ("张三",20) 1.new关键字,在堆内存中为Person创建对象 2.把Person中的非静态成员加载到方法区,并为