理解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 co 函数库的含义和用法实例总结

    JS co 函数库的含义和用法实例总结

    这篇文章主要介绍了JS co 函数库的含义和用法,结合实例形式总结分析了JS co 函数库的基本含义、功能、用法及操作注意事项,需要的朋友可以参考下
    2020-04-04
  • 使用 JavaScript 创建并下载文件(模拟点击)

    使用 JavaScript 创建并下载文件(模拟点击)

    本文将介绍如何使用 JavaScript 创建文件,并自动/手动将文件下载,这在导出原始数据时会比较方便
    2019-10-10
  • 使用变量动态设置js的属性名

    使用变量动态设置js的属性名

    js的属性名可以使用变量,例如js对象object,当赋给该对象属性的时候可以采用以下方式,比较实用,需要的朋友可以看看
    2014-10-10
  • JavaScript去除字符串两端空格的三种方法

    JavaScript去除字符串两端空格的三种方法

    本文主要介绍了JavaScript去除字符串两端空格的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • js脚本编写简单刷票投票系统

    js脚本编写简单刷票投票系统

    这篇文章主要为大家详细介绍了js脚本编写简单刷票投票系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 微信小程序收藏功能的实现代码

    微信小程序收藏功能的实现代码

    这篇文章主要介绍了微信小程序收藏功能的实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 基于JavaScript实现一个简单的Vue

    基于JavaScript实现一个简单的Vue

    这篇文章主要介绍了基于JavaScript实现一个简单的Vue的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • 键盘上一张下一张兼容IE/google/firefox等浏览器

    键盘上一张下一张兼容IE/google/firefox等浏览器

    键盘上一张下一张的效果想必大家都有见到过吧,本文为大家介绍的这个兼容IE,google,firefox等主流浏览器
    2014-01-01
  • JS字符串截取出现的bug以及解决方式

    JS字符串截取出现的bug以及解决方式

    之前在获取元素属性时,踩了个坑,记录一下,下面这篇文章主要给大家介绍了关于JS字符串截取出现的bug以及解决方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 解决html input验证只能输入数字,不能输入其他的问题

    解决html input验证只能输入数字,不能输入其他的问题

    下面小编就为大家带来一篇解决html input验证只能输入数字,不能输入其他的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07

最新评论