作家
登录

JavaScript原型继承之基础机制分析

作者: 来源:www.28hudong.com 2013-03-30 00:45:29 阅读 我要评论

这一语言功能的本质依赖于 JavaScript 特有的原型链(prototype chain)模式。 所以严格意义上说,JavaScript 是基于原型的面向对象语言。也就是说,每个实例对象都具有一个原型。对象从该原型中继承属性和方法。 1、构造函数 利用构造函数,可以简单地创建对象。构造函数内的 this 关键字指向实例对象本身: 复制代码 代码如下: function People(name){ this.name = name; } 使用 new 运算符和构造函数创建实例对象: 复制代码 代码如下: var people = new People('小明'); console.log(people.name); //小明 但如果创建了两个实例,这两个实例之间无法直接共享属性和方法: 复制代码 代码如下: var people1 = new People('小明'); var people2 = new People('小王'); people1.sex = 'male'; console.log(people2.sex); //undefined 也就是说对象一旦被实例化,其属性方法都独立存在,对某个属性的修改不会影响到其他实例。 2、Prototype 于是就有了 prototype 属性,这个属性是在生成实例对象时自动创建的。它本身又是一个对象,拥有能够在实例间共享的属性和方法。而实例本身的属性和方法,则包含在构造函数中。换句话说,构造函数内部的属性和方法,在经过实例化后都成为了本地的属性和方法,而原型(prototype)中的属性和方法在实例中只是一种引用,因此能够被多个实例共享。 还是刚才那个构造函数,现在为它增加 prototype 属性: 复制代码 代码如下: People.prototype.sex = 'female'; //或者写成 People.prototype = {sex: 'female'}; console.log(people1.sex); //male console.log(people2.sex); //female People 构造函数的 prototype 属性参数会直接影响到 people1 和 people2 两个实例。 但为什么 people1.sex 输出 male 呢?这是由于在 JavaScript 中,原型关系以递归形式存在。对象的原型也是一个对象,而原型的本身也可能具有一个原型。原型的最高层级是全局的 Object 对象。 这就是说,一旦 people1.sex 被设置为 male 后,它在原型中对应的值就无法被暴露出来。假如 people1.sex 本身没有值,才会从构造函数的 prototype 属性中读取,以此类推一级一级向上查找,直到 Object 对象。 注:使用 “null” 给对象赋值,可以销毁自定义对象,释放内存资源。

  推荐阅读

  jQuery验证Checkbox是否选中的代码 推荐

一般人验证估计都是想到这种方法: 复制代码 代码如下: function chk() //是否被选中验证有选中的return true,否return false { var falg = 0; $("input[name=cbname]:checkbox").each(function(){ if($(this).att>>>详细阅读


本文标题:JavaScript原型继承之基础机制分析

地址:http://www.17bianji.com/kaifa2/JS/24233.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)