JavaScript 学习之原型与函数
2012-12-22 13:55
417 查看
1. 首先,所有对象都是通过构造函数产生的。所以任何对象的.constructor属性,指向其构造函数。
2. 只有函数才有prototype属性,用来定义,以它为构造函数所构造出来的对象,具有prototype所定义的一切属性和方法。
3. 函数的.prototype定义的所有属性和方法,和该函数本身无关,只和使用该函数构造出来的对象有关。
4. 每个对象的__proto__属性,表明了该类对象的类型。属性的值是其.constructor的prototype。
5. 在调用对象的成员函数时,如果该成员函数不是该对象本身定义的,而是原型继承来的(也就是说这个属性/方法来自于是该对象构造函数的原型)那么就会顺着obj.__proto__找到该方法。
6. 有一个特殊的对象,该对象的__proto__是null,这个就是object的始祖(我称之为始祖对象,其实他是Object.prototype)
7. 在创建一个函数foo()后,foo的constructor是Function对象。foo的__proto__当然就是Function.prototype;而foo的prototype是唯一的!是编译器附加给他的,是一个Object类型。foo.prototype是从Object()构造的,所以foo.prototype.__proto__是Object.prototype(就是始祖对象)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
始祖对象定义了对象的根本方法,即:
__defineGetter__ [Function] (id=65)
__defineSetter__ [Function] (id=66)
__lookupGetter__ [Function] (id=71)
__lookupSetter__ [Function] (id=74)
constructor [Function] (id=19)
hasOwnProperty [Function] (id=68)
isPrototypeOf [Function] (id=70)
propertyIsEnumerable [Function] (id=69)
toLocaleString [Function] (id=72)
toString [Function] (id=73)
valueOf [Function] (id=67)
__proto__ null
所以呢,JS世界里面的所有对象,都自动继承了这些方法。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
函数的默认原型是什么样的呢?
var A = function() {};
A.prototype.constructor == A; //true
var a = new A();
a.constructor == A; //true (a's constructor property inherited from it's prototype)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这个例子很有用!
//Constructor. <em>this</em> is returned as new object and its internal [[prototype]] property will be set to the constructor's default prototype property
varCircle = function (radius) {
this.radius = radius;
//next line is implicit, added for illustration only. this指针这个时候指向的是正在构造的对象。
//this.__proto__ = Circle.prototype;
}
2. 只有函数才有prototype属性,用来定义,以它为构造函数所构造出来的对象,具有prototype所定义的一切属性和方法。
3. 函数的.prototype定义的所有属性和方法,和该函数本身无关,只和使用该函数构造出来的对象有关。
4. 每个对象的__proto__属性,表明了该类对象的类型。属性的值是其.constructor的prototype。
5. 在调用对象的成员函数时,如果该成员函数不是该对象本身定义的,而是原型继承来的(也就是说这个属性/方法来自于是该对象构造函数的原型)那么就会顺着obj.__proto__找到该方法。
6. 有一个特殊的对象,该对象的__proto__是null,这个就是object的始祖(我称之为始祖对象,其实他是Object.prototype)
7. 在创建一个函数foo()后,foo的constructor是Function对象。foo的__proto__当然就是Function.prototype;而foo的prototype是唯一的!是编译器附加给他的,是一个Object类型。foo.prototype是从Object()构造的,所以foo.prototype.__proto__是Object.prototype(就是始祖对象)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
始祖对象定义了对象的根本方法,即:
__defineGetter__ [Function] (id=65)
__defineSetter__ [Function] (id=66)
__lookupGetter__ [Function] (id=71)
__lookupSetter__ [Function] (id=74)
constructor [Function] (id=19)
hasOwnProperty [Function] (id=68)
isPrototypeOf [Function] (id=70)
propertyIsEnumerable [Function] (id=69)
toLocaleString [Function] (id=72)
toString [Function] (id=73)
valueOf [Function] (id=67)
__proto__ null
所以呢,JS世界里面的所有对象,都自动继承了这些方法。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
函数的默认原型是什么样的呢?
var A = function() {};
A.prototype.constructor == A; //true
var a = new A();
a.constructor == A; //true (a's constructor property inherited from it's prototype)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这个例子很有用!
//Constructor. <em>this</em> is returned as new object and its internal [[prototype]] property will be set to the constructor's default prototype property
varCircle = function (radius) {
this.radius = radius;
//next line is implicit, added for illustration only. this指针这个时候指向的是正在构造的对象。
//this.__proto__ = Circle.prototype;
}
相关文章推荐
- JavaScript 学习之原型与函数
- 学习javascript的闭包,原型,和匿名函数之旅
- 学习javascript的闭包,原型,和匿名函数之旅
- javascript学习 - js的Date对象函数
- Javascript 学习笔记之 对象篇(二) : 原型对象
- Javascript入门学习第五篇 js函数第1/2页
- 学习Javascript原型笔记(一)
- JavaScript学习3:原型和继承
- JavaScript的两种面向对象方法--原型继承(prototype)和函数继承(闭包)
- JavaScript学习-内部函数
- javascript学习随笔(二)原型prototype
- 轻松学习 JavaScript——第 3 部分:函数中的默认参数
- javascript 学习 第6天 函数
- 【Javascript 学习笔记】eval 函数
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第32讲_构造函数_成员函数详解_学习笔记_源代码图解_PPT文档整理
- javascript基础学习三:原型继承
- javascript 小白学习指南 理解隐形原型
- 轻松学习 JavaScript (2):函数中的 Rest 参数
- Javascript学习---函数绑定bind()
- 【学习笔记】javascript 基础篇 变量 运算符 函数