一:对象创建的方法
二:对象 this 指向
//普通 字面量形式
var obj = {
name: '名字',
fn: function() {
console.log(this.name);
}
}
//new 实例
var obj = new Object();
obj.name = '';
obj.age = "";
//构造函数
function obj(name, age) {
this.name = name;
this.age = age;
this.fn = function() {
console.log(this.name);
}
}
var n = new obj('字符串', 33);
1. 方法调用模式
var a = {
name: '你好',
fn: function() {
//指向 对象本身
console.log(this.name);
var that = this;
function b() {
// 指向window 本身
console.log(that.name);
}
b()
}
}
a.fn();
当函数被保存为一个对象的属性时,它就可称为这个对象的方法.当一个方法被调用时,this 被绑定到这个对象上.如果调用表达式包含一个提取属性的动作(. 或 []),那么它被称为方法调用.例如:
sayName 函数作为对象 obj 的方法调用,所以函数体中的 this 就代表 obj 对象
var name = "window";
var obj = {
name: "kxy",
sayName: function() {
console.log(this.name);
}
};
obj.sayName(); //kxy
2. 函数调用模式
当一个函数并非一个对象的属性时,那么它就是被当做函数来调用的.在此种模式下,this 被绑定为全局对象,在浏览器环境下就是 window 对象.例如:
sayName 以函数调用模式调用,所以函数体中的 this 代表 window 对象.
var name = "window";
function sayName() {
console.log(this.name);
}
sayName();
3. 构造函数模式
如果在一个函数前面加上 new 关键字来调用,那么就会创建一个连接到该函数的 prototype 成员的新对象,同时,this 会被绑定到这个新对象上.这种情况下,这个函数就可以成为此对象的构造函数.例如:
Obj 作为构造函数被调用,函数体内的 this 被绑定为新创建的对象 person.
function Obj() {
this.name = "kxy";
}
var person = new Obj();
console.log(person.name); //kxy
4.apply 调用模式
在 JS 中,函数也是对象,所有函数对象都有两个方法:apply 和 call,这两个方法可以让我们构建一个参数数组传递给调用函数,也允许我们改变 this 的值.例如:
总结:对象中方法 this 指向的是对象的本身. 如果对象的函数内部包涵其他函数的话,里面的函数 this 指向是 window. 除非把 this 指向提取出来.函数中的 this 指向,只要不是构造实例,那么 this 指向得是 window.
var name = "window";
var person = {
name: "kxy"
};
function sayName() {
console.log(this.name);
}
sayName(); //window
sayName.apply(person); //kxy
sayName.apply(); //window
来源: http://www.bubuko.com/infodetail-2453809.html