浅解javascirpt this 让我们来浅浅的理解它
浅解javascirpt this 让我们来浅浅的理解它
http://stackoverflow.com/questio ... ript-object-literal
这篇文章只能说给一个this的基本认识.深入详解待我看完ecma-262-3...
或者你可以移步到:翻看一下已经消化过一次的ecma-262-3
http://dmitrysoshnikov.com/tag/ecma-262-3/
你可以参考这个网站的基础:
http://remember2015.info/blog/?p=141
The this variable is attached to functions. Whenever you invoke a function, this is given a certain value, depending on how you invoke the function. This is often called the invocation pattern.
明确两点:
1.this永远指向调用者.永远永远!!!!!这是最高优先级.
2.javascript里一切皆object
调用javascript的方法典型的四种
method
function
constructor
apply
method的可以理解为在java中,对象里面的成员方法
- var name="globle"var foo = {name:"foo"};
- //foo.someMethod相当于java里的静态方法foo.someMethod = function(){
- console.info(this.name);
- }
- //打印出foo这里的this指向foo 对象.可以用chrome调试一下(强烈推荐有chrome,个人觉得比firebug好)Function 理解为c++的静态函数
- var name = "globle"
- var foo = function(){
- var name="foo" //这样定义实际上是定义的局部变量,如果要定义为全局变量去掉var
- alert(this.name);//this指向调用它的全局对象
- alert(name); //根据scope chain函数的局部变量在顶端,所以先找到foo,如果不定义var name=”foo”将打印globle }
复制代码foo();
//先打印出globle,再打印foo//this在这里指向window.objects.调用的它的全局对象.
在闭包.this指向的也是全局对象
- var foo = {};
- var name="globle";
- foo.someMethod = (function(){
- var that = this;
- var name="foo";
- return function(){
- var name="nested";
- console.info(that.name);
- }
- })();
- var a=foo.someMethod();
复制代码同样打印的globle;
Constructor
当使用Constructor时,一个新的对象将产生,this也将指向这个对象.
- function Foo(){
- this.confusing = 'hell yeah';
- }
- var myObject = new Foo();
复制代码也就是说,在new Foo()的时候,this指向了myObjcet
apply 和 call
这两个函数的意思就是以其他object的作用域来调用这函数,apply call 的功能是一样,只是第二个参数不同而已
看:
- foo.apply('omg',args); 的作用相当于:omg.foo2=function(args){
- foo(args);
- }
- omg.foo2(args);
复制代码以下this的指向就是omg这个object
- function foo(a,b){
- alert(a);
- alert(b);
- alert(this);
- }
- var args = ['ah','be'];
- foo.apply('omg',args);
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论