javascript 原型对象与prototype的关系
Javascript中的继承机制是所谓的原型对象继承,通过属性访问机制的特殊性来实现继承的。之前我一直以为所有对象的原型对象就是prototype所指的那个对象。后来在看javascript设计模式的时候发现作者注中有一句话与我之前的理解不同,他说“每个对象都有一个原型对象,但这并不意味着每个对象都有一个prototype属性”。看完我就有点迷茫了,决定彻底把这个死人的原型继承搞搞清楚。然后翻了些文章和书籍,最后终于在javascript权威指南第五版中找到了个人 认为比较权威的解释。关于原型链和属性访问机制我就不再阐述了,这方面可以看看Rocky的文章 写的蛮清楚的 http://blog.csdn.net/rocky_j2ee/archive/2009/03/21/4012385.aspx
那我们先从创建对象说起,用new操作符创建对象的时候javascript会做3件事:
首先是创建一个空对象(empty object),
然后对这个空对象的原型对象进行赋值,
最后把这个空对象赋值给构造函数的this属性且运行这个构造函数。
function Person(name) {
this.name = name;
}
var p = new Person(); 相当于以下步骤:
1. Var p = {};
2. p.[[prototype]] = Person.prototype //这一步是伪代码,实际上一个对象的原型对象是不能通过代码来访问的,
//这里只是为了说明创建对象的步骤
3. p.methodName = Person //这样的话Person的this就会指向p
p.methodName();
如果你对第二步不是很明白,那么先把代码放一放,接下来我会详细解释下第二步原型对象的赋值(或者说构造函数和原型对象的关系):
上面我提到过在创建完一个空对象后,会初始化这个空对象的原型对象,javascript会把构造函数的一个叫做prototype的属性所指向的对象赋值给当前空对象的原型对象。所有的function都有一个prototype属性,当一个function被定义之后这个属性会被自动的创建和初始化。一个function 的prototype属性的初始值是一个对象(an object),这个对象只有一个属性叫
相关文档:
从2004年下半年开始学习Web编程至今3年有余。从HTML,asp开始到现在的VS2008一路学过来,其中学的最多的还是服务器端编程,对客户端编程的学习还是不成系统。虽然在很多个系统里面应用过脚本,有些还起到了比较重要的作用。但一直是只知其然不知其所以然,用的是小心翼翼。现在脚本编程从以前的"雕虫小技"变成了一个Web开 ......
<html>
<mce:script type="text/javascript"><!--
function checkedAll(checked)
{
var ckbArray=document.getElementsByName('ckb');
for(var i=0,len=ckbArray.length;i<len;i++)
{
ckbArray[i].checked=checked;
}
}
function clickbutton()
{
var ckbArra ......
有时候找到别人写的js代码是压缩过的,通过这个工具可以对代码进行格式化。
<html>
<head>
<title>JS格式化工具 </title>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<mce:style><!--
* { padding:0px; margin:5px; font-size:13px; font-fami ......
自定义一个log函数,输出传入函数的对象或者信息.
Log.js
// JScript source code
function
log(category, message, object) {
// If this category is explicitly disabled, do nothing
if
(log.options[category + "Disabled
"]) return
;
// Find the container
var
id = categ ......
<SCRIPT>
//判断y年的农历中那个月是闰月,不是闰月返回0
function leapMonth(y){
return(lunarInfo[y-1900]&0xf);
}
var lunarInfo=new Array(
0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,
0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0 ......