理解JavaScript的prototype属性

 更新时间:2012年02月11日 23:30:16   作者:  
JavaScript可以说是最让人初学者难以理解的单一属性。我看了一些资料后,开始明白其实这些困难很大程度来自prototype这个名字本身的二义性
其实,关于prototype只要几句话就可以总结:
任何原型都是对象,只有对象有原型
只有Function有prototype属性,它是这个Function作为构造器时生成对象所继承的原型。Function的原型和它的prototype属性无关
对象的原型可以通过非标准的属性 __proto__ 或ECMAScript5的方法 Object.getPrototypeOf() 访问。
1其实是错的,Object这个原型链尽头的对象它没有原型。可是为了更简单表述。在看原型链后你就会明白.toString()这类没有定义过的方法是怎样来的。
上面说的二义性,是文字理解上的,语法本身没有歧义。prototype是原型的意思,可是一个对象的原型不是由prototype去访问。
Function有prototype属性,可是和自己的原型没有关系。理解这点后,再去看关于原型链、继承的文章就容易理解多了。

下面是些例子,可以加深认识:
复制代码 代码如下:

// 任何对象都有原型
obj = {};
console.log( obj.__proto__ );
console.log( Object.getPrototypeOf(obj) );
console.log( obj.__proto__ === Object.getPrototypeOf(obj) );

//对象并没有语法意义的prototype属性
alert(obj.prototype) //undefined

//prototype作为一个属性,仅存在于Function中,代表以这个Function创建的新实例集成的原型,和Function本身的原型无关
var F = function(name){
this.name = name;
}
obj = {a:3,
get b (){
return this.a;
}
};
F.prototype = obj;
newObj = new F('new name');
newObj.name; //作为构造器,name是newObj的自身属性
newObj.a; //3
//它继承了obj。可以通过这样证实:
Object.getPrototypeOf( newObj ) === obj; // true
newObj.__proto__ === obj; //true

相关文章

  • js Clip的奇思妙想之文字拼接效果

    js Clip的奇思妙想之文字拼接效果

    CSS的确是很强大,很奇妙。很多爱好者时常可以用CSS做出一些让人意想不到的效果,比如用CSS做的灯笼、用CSS画的房子!然而这些东西酷归酷,说到底还只是一些不实用的东西。过滤之,过滤之……
    2008-11-11
  • JavaScript中Iterator迭代器接口和循环

    JavaScript中Iterator迭代器接口和循环

    这篇文章主要介绍了JavaScript中Iterator迭代器接口和循环,迭代器是数据结构遍历的一种机制迭代器主要是提供for...of使用,更多相关内推需要的小伙伴可以参考下面文章内容
    2022-06-06
  • js无痛刷新Token的实现

    js无痛刷新Token的实现

    本文主要介绍了js无痛刷新Token的实现,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 浅谈js中字符和数组一些基本算法题

    浅谈js中字符和数组一些基本算法题

    下面小编就为大家带来一篇浅谈js中字符和数组一些基本算法题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • js仿腾讯QQ的web登陆界面

    js仿腾讯QQ的web登陆界面

    这篇文章主要为大家详细介绍了JavaScript模仿腾讯QQ的web登陆界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Javascript学习之谈谈JS的全局变量跟局部变量(推荐)

    Javascript学习之谈谈JS的全局变量跟局部变量(推荐)

    这篇文章主要介绍了Javascript学习之谈谈JS的全局变量跟局部变量虽然脚本之家小编以前发过,但还是这篇文章整理的比较好,需要的朋友可以参考一下
    2016-08-08
  • 轻松实现Bootstrap图片轮播

    轻松实现Bootstrap图片轮播

    这篇文章主要介绍了全面解析Bootstrap图片轮播效果,Bootstrap提供了carousel插件,实现图片轮播非常方便,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • javascript中的 onchange事件详解

    javascript中的 onchange事件详解

    onchange 事件会在域的内容改变时发生,可用于单选框与复选框改变后触发的事件,本文通过示例代码介绍javascript中的 onchange事件,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • 页面中iframe相互传值传参

    页面中iframe相互传值传参

    兼容IE和火狐JS父窗口调用iframe里面的对象、函数的方法
    2009-12-12
  • JavaScript实现简易tab栏切换案例

    JavaScript实现简易tab栏切换案例

    这篇文章主要为大家详细介绍了JavaScript实现简易tab栏切换案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06

最新评论