js中的prototype对象的理解

js的Object对象有constructor, hasOwnProperty, isPrototyperOf, propertyIsEnumerable, toLocaleString, toString, valueOf方法. 

typeof String === "function";

 

typeof Function === "function";

typeof Object === "function";

......

可以看出来,它们是函数类型

再看一下它们的prototype链

 

假设对象的原型属性名为(如: chrome) __proto__

 

 

1.  除Object外,所有的变量有__proto__属性,并且最后的__proto__一定是Object原型对象。

即所有的变量都有Object的方法。

String 

chatAt :  function ... 

charCodeAt :  function ...

sub :  function ....

..........

__proto__: Object

Funciton

arguments: ...

call: 

apply:

.............

__proto__: Object

等等

2. 

 

 

当你得到一个A对象类型的B实例的时候,B实例的__proto__属性的值就是A.prototype对象引用。

        function A (name) {

        this.name = name ;

    return this;

       }

       A是一个Function对象,所以A.__proto__等于Function的原型,即A.

 

 

 

       A instanceof Function  //true
       A instanceof Object     //true
       A.call(this,name)    //call没有在A中定义,但在原型链__proto__:Empty()中有
       A.toString()            //toString 也没有定义,在Function的原型中没有,但在Funciton的原型链__proto__:Object中有,一直找到最后。
       -->
       -->  A.__proto__ = Function.prototype   //
Function的原型对象是
function Empty(){}
       -->  Function.prototype.__proto__ =  Object.prototype     //Object的原型对象是Object
例子
    
function Person(name){
this.name = name ;
}
function Emp(name,sal){
Person.call(this,name);
this.sal = sal ;
}
Emp.prototype = new Person();    //Emp的原型设成Person对象
var p = new Person('wanghc');
var e1 = new Emp("emp1",1000);
var e2 = new Emp("emp2",2000);
结果是:
p 是Person的实例,有属性
name: "wanghc",
__proto__:Person

      e1 是的Emp的实例,有属性

name: "emp1" ,

sal : 1000,

__proto__: Person

     

e2 是的Emp的实例,有属性

 

name: "emp2",

 

sal: 2000,

__proto__: Person

 

并且e1.__ptoto__ === e2.__proto__===Emp.prototype 

 

说明同一类对象共用同一原型对象

 

这样就实现了Emp继承Person

 

 

        Emp的实例 拥有Person的原型,也就是拥有他的属性或方法

      Emp实例的属性查找顺序

              Emp-->Person-->Object

      只有函数类型才有原型对象

 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值