1. 函数的定义总是覆盖变量的定义
function f(){
alert( 1111 );
}
var f = 1;
alert( f );
此时输出的是1111
2. 函数变量的作用域不管定义在函数体内任何地方,都将是作用于整个函数体内
var x = 1;
function f(){
alert( x );
var x = 2;
}
f();
输出undefine,JS变量是在预编译期定义的,所以一开始全局变量x 和 局部变量x都已经被解析,函数体内此时的x的值是undefined.
3. hasOwnProperty isPrototypeOf constructor 区别
hasOwnProperty ( obj1.hasOwnProperty( '属性或方法' ) ) 判断属性、方法是否是某个对象的实际属性或方法而非继承来的.
var o = new Object();
o.name = 1;
alert( o.hasOwnProperty('name') );
// 输出 true 表示name是o的实际属性,非继承属性.
isPrototypeOf ( obj2.isPrototypeOf( obj1 ) ) 判断obj2是否在obj1的原型链上;
function o(){ // }
var obj = new o();
alert( o.prototype.isPrototypeOf( obj ) );
// 输出true 表示 o.prototype 在 obj的原型链上
constructor ( obj.constructor ) 返回对象的构造函数.
function o(){ // }
var obj = new o();
alert( obj.constructor ); // 输出o.
4. 构造函数里的成员 和 prototype 区别
定义在构造函数里的成员在每次构造实例的时,会把所有的成员重新定义在该实例上.
function o(){
this.name = 1;
}
var obj = new o();
alert( obj.hasOwnProperty( 'name' ) );
// 输出true 说明 obj 已经有了非继承的属性name;
定义在 property 里的成员 是继承给实例对象的,实例对象本身并没有 name 属性
function o(){
// 构造函数
}
o.prototype = {
name : 1
}
var obj = new o();
alert( obj.hasOwnProperty( 'name' ) );
// 输出 false 说明 obj 的name属性是继承来的而不是本身实际有的name属性.
5. Image对象 图片缓存
1. 使用方法
var i = new Image();
// 创建Image实例用于预加载图片
i.src = '1.jpg';
// 此时完成1.jpg的预加载
// 当执行img的src时 如果i的图片加载完,则直接调用。
2. Image对象的方法
var i = new Image();
// onload 方法表示图片是否加载完成
i.onload = function (){
}
3.Image对象的属性 complete ,当complete值为false时表示图片的onload未执行,即img未加载完。当图片加载完成时,complete的值为true ( 前提是未调用Image对象的onerror和onabort事件,因为调用了这3个事件的任何一个complete的值都将边为true )
例子: 图片加载未完成时,可以载入一个加载中的gif动画,等img.onload事件执行时再加载图片.
window.onload = function (){
var i = new Image();
i.src = 'a.jpg';
if(!i.complete){
img.src='x.gif';
}
i.onload = function (){
img.src=i.src;
}
}