7、IE和标准下有哪些兼容性的写法
a、获取事件对象:var ev = ev || window.event
var ev=ev?ev:window.evnet;
srcElement:IE9之前的浏览器用来获取事件目标元素
target:IE9+、ff、chrome用来获取事件的目标元素
b、获取事件目标元素:var target = ev.srcElement||ev.target
c、innerText
8、call和apply的区别
考点:call和apply的用法
call和apply相同点:改变函数中this的指向
不同点:函数参数的传递形式
call将函数参数依次传入
apply将函数参数用一个数组的形式传入
无参数调用:
function fn(){
alert(this.name);
}
var p1={name:1};
fn.call(p1);
fn.apply(p1);
有参数调用:
function fn2(name,age){
this.name=name;
this.age=age;
}
var p1={};
fn2.call(p1,"张三",20);
fn2.apply(p1,["张三",20]);
9、如何实现js中的继承
考点:继承的多种方式(参考 高设6.3)
1、原型继承的第一种方式:
function Cat(name){
this.name=name;
}
//原型继承
Cat.prototype.say=function(){
alert("你好,我是一只猫,我叫:"+this.name);
}
2、原型继承第二种方式:
function Cat(name) {
this.name = name;
}
function Animal() {}
Animal.prototype.run = function () {
alert("动物跑");
};
Cat.prototype = new Animal();
Cat.prototype.constructor=Cat;
3、借用构造函数
function Cat(name,age) {
Animal.call(this,name,age);
}
function Animal(name,age) {
this.name = name;
this.age=age;
}
4、经典继承
function create(obj) {
if(Object.create) {
return Object.create(obj);
} else {
function F(){};
F.prototype = obj;
return new F();
}
}
function create(obj) {
If(object.create){
Return object.create(obj);
}else{
function F(){};
F.prototype=obj;
Return new F();
}
}
10、JavaScript this、闭包、作用域
this:指向调用上下文
作用域:定义一个函数就开辟了一个局部作用域,整个js执行环境有一个全局作用域
闭包:一个函数可以访问其他函数中的变量(闭包是一个受保护的变量空间)
var f=(function fn(){
var name=1;
return function(){
name++;
console.log(name);
}
})();