js prototype、__proto__的区别及使用场景及原型链的说明

一:区别

__proto__是所有对象(包括函数都有的);

prototype只有函数有;



二:原型链是什么?

原型链是针对构造函数的。通过new 创建函数,new出来的函数就会继承创建他的函数的属性。如果访问new函数的某个未在当前函数中定义的变量,他就会往上查找(像创建他的函数),这个查找的过程就教做原型链;

例:

var Person=function(){

Person.prototype.say=function(){

alert('hello word!')

}

 };

var p = new Person();

p.say(); //alert('hello word!')



三:说明 prototype与proto的关系

var Person=function(){   };

var p = new Person();


看看new 做了什么??

var p={ }; //第一步:创建一个对象

p.proto=Person.prototype;//第二步

Person.call( p );//第三步:构造p(初始化p);


验证下第二步

var Person=function(){   };

var p = new Person();

console.log(p.proto=Person.prototype) // true


例子:

var  Person function  () {};
Person.prototype. alertfunction  () {
    alert ( "Person alert" );
}
Person.prototype. time50000;
var  Programmer function  () {};
Programmer.prototype =  new  Person ();
//var p1=new Person();Programmer.prototype=p1
//p1.__proto__=Person.prototype;
//Programmer.prototype.__proto__=Person.prototype;
Programmer.prototype.prompt  function  () {
    alert ( "programmer prompt something" );
};
Programmer.prototype. time500;
var p =  new  Programmer (); //p.__proto__=Programmer.prototype;
p. alert (); // alert("Person alert");
p. prompt   (); //     alert("programmer prompt something");
alert (p. time ); //500

//根据上面得到p.__proto__=Programmer.prototype。
//得到p.__proto__.__proto__=Person.prototype。
//其实prototype只是一个假象,他在实现原型链中只是起到了一个辅助作用,原型链的本质,其实在于__proto__


例图:引用至:(找不到了原作者,下回找到原作者给补上)


四:使用场景

prototype:写一个js类,需要继承的你都放这个属性下
__proto__你基本不会去用,js引擎实现原型链用的,原型链看上面。


五:对象使用prototype的好处

  1)不使用prototype属性定义的对象方法,是静态方法,只能直接用类名进行调用!另外,此静态方法中无法使用this变量来调用对象其他的属性!
  2)使用prototype属性定义的对象方法,是非静态方法,只有在实例化后才能使用!其方法内部可以this来引用对象自身中的其他属性!


参考文件:

http://rockyuse.iteye.com/blog/1426510

   


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值