this
function Person(){
this.eat = function(){
console.log("I am eating");
},
this.drink = function(){
console.log("I am drinking");
},
this.play = function(){
console.log("I am playing");
}
}
var person = new Person();
person.eat().play().drink();//会报错
- 报错原因:因为,eat等这三个方法,执行后并未指定返回值,默认返回undefined
function Person() {
this.eat = function() {
console.log("I am eating");
return this;
},
this.drink = function() {
console.log("I am drinking");
return this;
},
this.play = function() {
console.log("I am playing");
return this;
}
}
var person = new Person();
console.log(person.eat().play());//成功连续调用方法
this指向
var name = "222";
var a = {
name: "111",
say: function() {
console.log(this.name);//this为a,所以输出1111
}
};
var b = {
name: "333",
say: function(fun) {
fun();
}
};
b.say(a.say); //此时的this是指向window,所以输出222
- 详解:因为b.say(a.say),其中b执行say方法时,传入的只是function() {console.log(this.name);},与a无关,并且执行时,未指定是this.fun();所以此时的this为window
hasOwnPrototype()方法与关键词 in的区别
- hasOwnPrototype()作用:hasOwnPrototype()返回一个布尔值,判断对象是否包含特定的自身(非继承)属性。
- in作用:判断对象是否包含特定的自身属性包括继承属性。
instanceof
- 用法: A instanceof B,其中一般A为对象的实例化(变量),B一般是指对象
- 作用:判断A对象的原型链上是否有B的原型
- 返回值:为布尔值
区别对象与数组的三种方法
- 使用instanceof 进行区分 数组使用 instanceof Array, 对象使用 instanceof object
- 使用constructor进行区分 数组返回 function Array(){}; 对象返回 function Object(){};
- 使用Object.prototype.toString.call() 进行区分 数组返回[object Array];对象返回[object Object]
arguments.collee
- 作用:在执行匿名函数递归时,可以提供自身函数的调用
- 示例:使用立即执行函数计算50的阶乘
var result = (function(n) {
if (n == 1) {
return 1;
} else
return n * arguments.callee(n - 1);
}(50))
func.caller
function test() {
demo();
}
function demo() {
console.log(demo.caller);//输出test(){demo();};
}
网友评论