JavaScript之要点温习
2011-02-15 23:15 YZGJTSJT 阅读(222) 评论(0) 编辑 收藏 举报闲暇之余重温JavaScript把要点加以摘录
1、关键字 this
概念:在JavaScript中,任何用作方法的函数都被有效地传递了一个隐式的参数,即调用函数的对象。
例证:this的常见用法
this.Name;
this.Color;
this.setDog = function (name, color) {
this.Name = name;
this.Color = color;
};
};
很明显setDog的作用是用来给Name和Color赋值(虽然不妥,在这里只为证明),调用结果没有任何问题。
var dog1 = new dog();
dog1.setDog("Katty", "Yellow");
alert(dog1.Name + dog1.Color);
})();
很明显setDog方法中的this在执行过程中所指向的引用对象就是dog1,如何证明这一点呢。可以绕开this用一个辅助方法做到这点。
this.Name;
this.Color;
};
function setAnimal(animal, name, color) {
if (animal instanceof dog) {
animal.Name = name;
animal.Color = color;
} else {
throw new Error("isn't dog!");
};
};
(function () {
var dog1 = new dog();
setAnimal(dog1, "Ketty", "Yellow");
alert(dog1.Name + dog1.Color);
})();
结果同上面是一样的,这样理解this或许更清晰一些 。
2、属性继承
概念:属性继承只发生在读取时
例证:
this.X = x;
this.Y = y;
this.Z = z;
};
Circle.prototype.PI = 3.1415926;
(function () {
var c = new Circle(1,2,3);
alert(c.
c1.PI = 100;
alert(c.PI);
alert(Circle.prototype.PI);
})();
在获取c.PI时,JavaScript会首先检查c是否有一个名为PI的属性。如果没有,它接下来会检查c的原型对象是否有一个名为PI的属性。很显然 Circle.prototype中的确存在名为PI的属性,那么它就会返回原型对象中PI的值。
当写入c.PI时(即c.PI = 100),会发生什么呢?
首先还是检查c是否有一个名为PI的属性。如果没有,它则会把PI作为c自身的一个新属性创建,这也就意味着不会再去检查c的原型对象是否会有PI属性。此时再访问c.PI与访问c.X、c.Y、c.Z一样,都作为c的自身属性读取或写入。
因此在例证中,第一次弹出(获取)c.PI时,所取得的值为c的原型中的PI属性值。在经过给c.PI赋值后,c中便有了一个自身的PI属性。因此再次获取c.PI时,得到的结果必然是赋给的100。而原型对象的值仍然为3.1415926。
3、私有成员
概念:把属性变为私有的
例证:
this.width = w;
this.height = h;
};
Square.prototype.area = function () {
return this.width * this.height;
};
很显然,宽和高是能够被访问到的,如何改变呢!
this.width = function () { return w; };
this.height = function () { return h; };
};
Square.prototype.area = function () {
return this.width() * this.height();
};
这样就巧妙地实现了一个不可变的Square对象,其宽度和高度不能被改变,而且只能通过accessor方法来访问。
注:一般认为 Douglas Crockford 是第一个发现(或者说至少是发表)这种定义私有属性的方法的人。他的最初的讨论可在Http://www.crockford.com/javascript/private.html获得。