javascript的动态this与动态绑定
javascript是一门动态语言,最明显就是那个dynamic this。它一般都是作为函数调用者存在。在javascript,所有关系都可以作为对象的一个关联数组元素而存在。那么函数就是被掰成两部分储存于对象,一是其函数名(键),一是函数体(值),那么函数中的this一般都指向函数所在的对象。但这是一般而已,在全局调用函数时,我们并没有看到调用者,或者这时就是window。不过,函数声明后,其实并没有绑定到任何对象,因此我们可以用call apply这些方法设置调用者。
一个简单的例子:
window.name = "window";
var run = function() {
alert("My name is " + this.name);
}
run();
window.name = "window";
var run = function() {
alert("My name is " + this.name);
}
run()
运行代码
这里你不能说run是作为window的一个属性而存在,但它的确是被window属性调用了。实质上大多数暴露在最上层的东西都则window接管了。在它们需要调用时被拷贝到window这个对象上(不过在IE中window并不继承对象),于是有了window['xxx']与window.xxx性能上的差异。这是内部实现,不深究了。
另一个例子,绑定到一个明确的对象上
window.name = "window";
object = {
name: "object",
run: function() {
alert("My name is " + this.name);
}
};
object.run();
window.name = "window";
object = {
name: "object",
run: function() {
alert("My name is " + this.name);
}
};
object.run();
运行代码
答案显然易见,this总是为它的调用者。但如果复杂一点呢?
window.name = "window";
object = {
name: "object",
run: function() {
var inner = function(){
alert("My name is " + this.name);
}
inner();
}
};
object.run();
window.name = "window";
object = {
name: "object",
run: function() {
var inner = function(){
alert("My name is " + this.name);
}
inner();
}
};
object.r
相关文档:
scrollHeight: 获取对象的滚动高度。
scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象的滚动宽度
offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
offsetL ......
<P>JScript 中的运算符优先级是一套规则。该规则在计算表达式时控制运算符执行的顺序。具有较高优先级的运算符先于较低优先级的运算符执行。例如,乘法的执行先于加法。</P>
<P>下表按从最高到最低的优先级列出 JScript 运算符。具有相同优先级的运算符按从左至右的顺序求值。</P>
<DIV ......
在写读后感之前,先自我介绍一下,本人,男,24岁,未婚,资浅.NET程序员,在读此书之前已经能够熟练的利用JavaScript进行表单的一般验证(通过document.getElementById获取出文本框的值后再进行if...else...判断)。
刚刚拿到此书,心情好一番激动,沃~~~新华字典,长约26CM,宽约18CM,高约3.5 ......
经常会在js里用到数组,比如 多个名字相同的input, 若是动态生成的, 提交时就需要判断其是否是数组.
if(document.mylist.length != "undefined" ) {} 这个用法有误.
正确的是 if( typeof(document.mylist.length) != "undefined" ) {}
或 if( !isNaN(document.mylist.length) ) {}
typeof的运算数未定义,返回的就是 "u ......
1.自http://jorkin.reallydo.com/article.asp?id=275
第一次发现JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符.
而str.replace(/\-/g,"!")则可以全部替换掉匹配的字符(g为全局标志)。
replace()
The replace() method returns the string that results when you replac ......