理解JavaScript的prototype属性
2012-02-11 00:00
561 查看
其实,关于prototype只要几句话就可以总结:
任何原型都是对象,只有对象有原型
只有Function有prototype属性,它是这个Function作为构造器时生成对象所继承的原型。Function的原型和它的prototype属性无关
对象的原型可以通过非标准的属性 __proto__ 或ECMAScript5的方法 Object.getPrototypeOf() 访问。
1其实是错的,Object这个原型链尽头的对象它没有原型。可是为了更简单表述。在看原型链后你就会明白.toString()这类没有定义过的方法是怎样来的。
上面说的二义性,是文字理解上的,语法本身没有歧义。prototype是原型的意思,可是一个对象的原型不是由prototype去访问。
Function有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
相关文章推荐
- 深入理解javascript中函数的prototype属性(原型)
- 深入理解JavaScript:prototype和__proto__属性
- 对javascript 的prototype属性的理解
- 理解 JavaScript 中的 Function.prototype.bind
- Javascript的原型对象和prototype属性
- javascript中的this与prototype,原型理解
- JavaScript原型prototype属性
- Javascript原型Prototype理解
- Javascript中 关于prototype属性实现继承的原理图
- 理解javascript中的Function.prototype.bind的方法
- javascript 类属性、类方法、类实例、实例属性、实例方法、prototype、__proto__ 测试与小结
- 【追寻javascript高手之路04】理解prototype
- javascript 定义对象、方法和属性的使用方法(prototype)
- [置顶] 深入理解javascript原型和闭包(3)——prototype原型
- JavaScript:prototype属性使用说明
- 对javascript prototype的一点初步理解
- [转] 理解 JavaScript 中的 Array.prototype.slice.apply(arguments)
- JavaScript为对象原型prototype添加属性的两种方式
- 了解javascript中的prototype属性