JavaScript进阶试题
1.选出以下几个中为true的选项
null instanceof Object null === undefined null == undefined NaN == NaN null === null
2. 写出下题的输出结果
1 function Person(name, age) { 2 this.Name = '为负值'; 3 this.Age = '为负值'; 4 (function () { 5 this.Name = name; 6 this.Age = age; 7 }).call(this); 8 this.sayHello = function () { 9 alert('this.name,hello:' + this.Name); 10 alert('window.name,hello:' + window.Name); 11 }; 12 } 13 var p = new Person('sunny', '18'); 14 p.sayHello();
3.写出下题的输出结果
1 var a = 10; 2 sayHi(); 3 function sayHi() { 4 var a = 20; 5 alert(a); 6 } 7 alert(a);
4. 写出下题的输出结果
1 function foo() {
2 foo.abc = function () { alert('def'); };
3 abc = function () { alert('@@@@'); };
4 var abc = function () { alert('$$$$$'); };
5 }
6 foo.prototype.abc = function () { alert('456'); };
7 foo.abc = function () { alert('123'); };
8 var f = new foo();
9 f.abc();
10 foo.abc();
11 abc();
附:答案
1. false, false, true, false, true
2. this.name,hello:sunny
window.name,hello:undefined
3.20, 10
4. alert('456'); alert('def'); 最后一个abc() 方法可能会报错!
这个不知道多少人会错
附:
1. instanceof
为判断一个对象是否为某一数据类型,或一个变量是否为一个对象的实例;返回boolean类型
语法为 o instanceof A
实例: a instanceof b?alert("true"):alert("false"); //a是b的实例?真:假
2. call
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
简单的可以理解为
a.call(b); a.method.call(b,argument1,argument2);
简单实例:
1 function add(a,b) 2 { 3 alert(a+b); 4 } 5 function sub(a,b) 6 { 7 alert(a-b); 8 } 9 10 add.call(sub,3,1);
这个例子中的意思就是用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4);
注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。
稍微复杂点的实例:
1 function Class1() 2 { 3 this.name = "class1"; 4 5 this.showNam = function() 6 { 7 alert(this.name); 8 } 9 } 10 11 function Class2() 12 { 13 this.name = "class2"; 14 } 15 16 var c1 = new Class1(); 17 var c2 = new Class2(); 18 19 c1.showNam.call(c2);
注意,call 的意思是把 c1 的方法放到c2上执行,原来c2是没有showNam() 方法,
现在是把c1 的showNam()方法放到 c2 上来执行,所以this.name 应该是 class2,
执行的结果就是 :alert("class2");
实现继承的实例:
1 function Class1() 2 { 3 this.showTxt = function(txt) 4 { 5 alert(txt); 6 } 7 } 8 9 function Class2() 10 { 11 Class1.call(this); 12 } 13 14 var c2 = new Class2(); 15 16 c2.showTxt("cc");
这样 Class2 就继承Class1了,Class1.call(this) 的 意思就是使用 Class1 对象代替this对象,
那么 Class2 中不就有Class1 的所有属性和方法了吗,c2 对象就能够直接调用Class1 的方法以及属性了,
执行结果就是:alert(“cc”);
多重继承:
1 function Class10() 2 { 3 this.showSub = function(a,b) 4 { 5 alert(a-b); 6 } 7 } 8 9 function Class11() 10 { 11 this.showAdd = function(a,b) 12 { 13 alert(a+b); 14 } 15 } 16 17 18 function Class2() 19 { 20 Class10.call(this); 21 Class11.call(this); 22 }
ok 就介绍到这里了。关于call的方法参考sweting的博文 js call
尊重他人劳动成功。转载请注明出处! http://www.cnblogs.com/flyfishing/