首页 > 代码库 > javascript this
javascript this
最近看了很多人的微博,主要是“追梦子”的微博,总结了一下。希望大家多多指点。
1. 没有new this的指向问题 this的指向在函数创建的时候是决定不了的,在调用的时候才能决定,谁调用的就指向谁 因为this只会指向它的上一级对象 例一: function a(){ var user = "追梦子"; console.log(this.user); //undefined console.log(this); //Window}a(); // === window.a() var o = { user:"追梦子", fn:function(){ console.log(this.user); //追梦子 console.log(this); // Object{...} } } o.fn(); // ===window.o.fn() var o = { a:10, b:{ a:12, fn:function(){ console.log(this.a); //undefined console.log(this); //window } }}var j = o.b.fn; //j并没有被调用j(); // === window.j() | 2. new 构造方法 function Fn(){ this.user = "追梦子";}var a = new Fn();console.log(a.user); //追梦子 用了new关键字就是创建一个对象实例,我们这里用变量a创建了一个Fn的实例(相当于复制了一份Fn到对象a里面),此时仅仅只是创建,并没有执行,而调用这个函数Fn的是对象a,那么this指向的自然是对象a |
this 与return 如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例
function fn() { this.user = ‘追梦子‘; return {}; }var a = new fn; console.log(a.user); //undefined | function fn() { this.user = ‘追梦子‘; return function(){};}var a = new fn; console.log(a.user); //undefined | function fn() { this.user = ‘追梦子‘; return 1;}var a = new fn; console.log(a.user); //追梦子 | function fn() { this.user = ‘追梦子‘; return undefined;//return null}var a = new fn; console.log(a); //fn {user: "追梦子"} |
在浏览器中setTimeout、setInterval和匿名函数执行时的当前对象是全局对象window
apply用于改变函数执行时的当前对象,当无参数时,当前对象为window,有参数时当前对象为该参数
var name = "window"; var someone = { name: "Bob", showName: function(){ alert(this.name); }};var other = { name: "Tom"}; someone.showName.apply(); //windowsomeone.showName.apply(other); //Tom
javascript this
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。