关于 this 和 prototype 的理解

1:this 的理解比较好的书是 《Javascript语言精粹》

  平时我们全局写 var a = 1, 其实就是 window.a = 1;

  var f = function(){}, 其实就是 window.f = function(){}

  当执行 f(), 相当于执行 window.f(), 那么f 里的 this 是调用它的对象, 即window

  var obj = {f: function(){} }, 当执行 obj.f(); 那么调用 f 的是 obj对象, 则 f 里的 this 指向 obj

  看下面的代码,当执行 obj.f() 时, f 里面的 this 指向obj, 但是 func 里面的 this 不是指向obj, 这是 语言设计上的一个错误;

  从另一个层面上说,在 obj.f 函数里面是 没有对象调用func,这个时候我们默认定义它的 this 是 window

var obj = {
    a: 1,
    f: function(){
        var func = function(){
            console.log(this.a);
        }
        func();
    }
}

  总结:

  this 的指向就是谁调用这个函数, this 就是指向谁。

  比如 obj.f(), this 指向 obj;  obj.obj2.obj3.f(), this 指向 obj.obj2.obj3。

  当找不出调用这个函数的对象时, this 指向 window.

时间: 2024-10-06 03:07:33

关于 this 和 prototype 的理解的相关文章

prototype原型理解

一切都是对象,对象是若干属性的集合 数组是对象.函数是对象.对象还是对象.对象里面的一切都是属性,只有属性,没有方法.方法也是属性. 一切引用类型都是属性 怎么判断一个值是否是对象? 值类型的类型判断用 typeof , 引用类型的类型判断用 instanceof 对象都是通过函数创建的    //  对象是由构造函数 Object() 创建的 原型对象 每一个函数function都有一个prototype , 即原型. prototype有一个默认的属性constructor , 指向这个函数

JS中对于prototype的理解

JS中的prototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展.我们称B的原型为A. 2 javascript的方法可以分为三类: a -> 类方法 b -> 对象方法 c -> 原型方法 例子: function People(name){ //对象属性 this.name=name; //对象方法 this

javascript构造函数.prototype原型理解 函数.call() 方法克隆的理解

直接创建object对象 var stu = new Object(); 或 var stu = {}; stu.name="zhangsan"; stu.age = "18"; stu.fun = function(){ alert("我叫张三"); } 你也可以用讲stu当作一个模块,模块里面有多个对象,如下实例为一个简单的购物车系统的模块!var shoppingCar = {} shoppingCar.carInfo = function

javascript prototype 初步理解

阅读 “華安” 写的 JavaScript中对象的prototype属性 的个人理解 此段代码仅仅是为了理解prototype而写的, 还有许多需要修改的地方,若想了解更多,还是建议阅读 華安 本人写的 js实现继承等多篇文章 function point(x,y){ if(x) this.x = x; if(y) this.y = y; } point.prototype.x=0; point.prototype.y=0; /** 将一个对象设置为一个类型的原型,相当于通过实例化这个类型,为对

关于js的原型链,__proto__,prototype的理解

首先声明参考博文,感谢 http://blog.sina.com.cn/s/blog_6c62f4330102wq0u.html http://blog.csdn.net/leadn/article/details/51781539 等作者,还有一些其他链接这里就不粘贴了 js中关于prototype的文章不少,今天自己写一点自己的理解 不喜欢上来就粘概念,因为如果概念能够理解,也不需要写这篇文章了. 关于原型链里面的东西,主要就是prototype,__proto__这两个属性难以理解,今天我

对JS prototype的理解

1.什么是prototype? function F() {} f1 = new F();f2 = new F(); 以上的代码,F()是一个构造函数,f1和f2是由这个构造函数产生的对象. prototype是构造函数的一个属性,它的值就是由这个构造函数构造出来的对象的原型对象.(换句话来说,prototype既是构造函数的属性,也是由这个构造函数构造出来的对象的原型对象) 原型对象的属性和方法都会被"继承",换句话来说,F.prototype的属性和方法都会被f1和f2"

语法——原型prototype深入理解

console.log('-----------------------------Object'); var obj = {}; console.log(obj.__proto__ === Object.prototype); // true console.log(Object.prototype); // Object console.log(obj.prototype); // undefined console.log('-----------------------------Fun

prototype的理解

<!doctype html> <html> <head> <title></title> <meta charset = "utf-8"/> </head> <style type="text/css"></style> <script type="text/javascript"> //把原型想象成模子 function P

关于constructor与 Prototype的理解

constructor:每一个函数的Prototype属性指向的对象都包含唯一一个不可枚举属性constructor,该属性的值是这么一个对象:constructor指向了它所在的构造函数Prototype:每一个函数都包含一个prototype属性,这个属性指向的是一个对象的引用:而对已每一个函数(类)的实例都会从prototype属性指向的对象上继承属性,换句话说通过同一个函数创建的所有对象都继承一个相同的对象. function Person(name) { this.name = nam