javascript对象---3 原型链

一.原型链指针(__prototype__)的特色浏览器

1.原型对象(prototype): (本质是一个对象,每个函数在建立函数时,都是由Function这个对象产生一个原型对象,而后经过指针的方式赋给对象)是函数对象的一个内部属性,值是一个简单的对象,用户能够访问,操做 该对象,能够向原型对象里面添加属性、方法。函数

2.原型链(__proto__): 每一个对象都具有的,不可访问的内部属性(指针)(chorm等浏览器能够访问,但没法操做),指针指向 构造函数 对应的原型对象。(开发人员不能动);每建立一个对象,执行了一次构造函数spa

,有一个指针指向原型对象。prototype

3.原型链的特色:指针

原型链的终点是 Object对象 的 prototype 属性,该属性的 __proto__为null ,  全部的连接构成原型链。orm

原型链是一个从头至尾连接的闭环。对象

原型链的做用:继承

使用原型链能够模拟类的功能。内存

使用原型链能够实现继承关系。原型链

二.原型对象(prototype)的建立:

在预编译或执行匿名函数时,由JS引擎调用 new Function( ) 建立函数对象,以及函数对象的 prototype 对象。只有函数对象才有 prototype 属性。

 

function Fun(){  //函数在JS中也是对象
                 
            }
            //function fun()   以上代码,在预编译阶段至关于下面一句
            var Fun =new Function(); //这句代码就是 function fun()的过程 

 

栈内存中,在预编译阶段已经存在 Object  Function, 首字母大写

Object . toString(); //返回函数定义和函数体

Object : function Object( );  //一个function对象

Function:  function Object( );  //一个function对象

在程序加载前,内存中已经存在

function Object(){

}

function Function(){

}

在预编译阶段至关于定义了两个变量  

var Object = new Function();    //Object是一个特殊的浏览器本身建立的构造函数

var Function = new Function() ;//两个 Function 左侧和右侧的Function相同

在预编译阶段,会加载两个构造函数    Object : 特殊函数,表明对象函数         Function : 函数对象,自省的(本身调用本身建立本身)    var Function = new Function()

下一个问题

1.    var obj = {  //全局变量1 实际值为 object
                name : "ads";
            }

2. var obj =new Object();   obj.name="ads";

1. 和 2. 两个程序是同样的

任何一个对象都有原型链属性,只有函数对象有原型属性.

 

Object.prototype 的原型链 的原型指针指针是最终点。为空,全部对象均可以访问Object.prototype内的方法

Function.prototypre = new Object();

原型链的内部结构,链接方式

prototype 不起到原型链的做用,是指向原型对象的一个指针。__proto__:将原型链链接起来

 

三.原型对象(prototype)的默认属性(不要对prototype直赋值,会覆盖默认属性,致使原型链错误)

function Fun(){  //函数在JS中也是对象
                 
            }
            debgger; 

这里Fun原型对象中有两个属性  Fun.prototype : Object               constructor :function Fun( )         __proto__ : Object
            Fun.prototype = {
                name = 'zhang',
                age:11
            }

由于从新对原型对象赋值,  Fun.prototype : Object    age : 11   name : "张三“  __proto__ : Object  constructor不见了

1. __proto__:prototype对象的原型链。

2.constructor:构造器指针,指向构造函数对象。

四. 修改原型对象的属性:

Fun.prototype.attribute = value; //扩展属性

Fun.prototype.FunName = function(){} ;  // 扩展函数 

修改范例

Fun.prototype.name="zhang";
Fun.prototype.sayhello = function(){
                console.log("hello");
   }

至关于在

Fun.prototype{

name : ”张三“,

sayhello :function

}

 

function Fun(){  //函数在JS中也是对象
                 
 }
        
            Fun.prototype.name="zhang";
            Fun.prototype.sayhello = function(){
                console.log("hello");
            }
            var fun =new Fun();

            var fun1 =new Fun();
            fun.sayhello();  //至关于继承   原型链指针指向构造函数的原型对象

             fun1.sayhello( ) ;也能够  都是继承构造函数的方法,属性

Fun.prototype{   / /fun的原型对象

__proto__ : null  ;

constructor;  //指向他的构造函数,谁建立他指向谁   指向谁  Fun()

}

Fun :new Function{

prototype :

     _proto__ ;

}

constructor不影响原型链,做用,在原型对象(prototype)中能够访问构造函数,只有prototype属性中有constructor,其他对象没有。

扩展原型对象可扩展函数的方法。

五。原型链指针(__prototype__)的特色

1.不可访问性:在IE等浏览器__protoype__属性不可访问。

2.不可操做性,不能修改原型链指针的指向  Fun.__proto__=  //不能够这样写 

3.多元性:全部对象类型,(包括Function)都包含原型链指针。

4.链接性:对象的原型链指针默认指向 构造函数 的prototype对象。但 prototype 对象的 __proto__ 也会做为原型链的一部分,直到链接到Object prototype 对象。object原型对象中__proto__为null

5.通用性:在原型链上全部的 prototype  对象中的属性和函数,对象均可以访问调用。

6.检测上级原型链的方式:

instanceof  例如: Fun instanceof  Function  //true

fun instanceof Fun //true  fun是由Fun建立出的, Fun的原型链在 fun以前(上).

Function instanceof Object //true

Fun.prototype . isPrototypeOf  (fun)  //检测Fun的prototype是不是 fun 原型链上的一环  (此方法来自 Object的prototype 扩展 true,  只能检测 紧接着的两个原型链指针,fun指向 Fun的prototype

相关文章
相关标签/搜索