javascript函数对象和this

标签 javascript

下面两种情况有什么区别?

案例1

var Person = function() { this.name="Allen Kim" }
Person.name; //undefined

案例2

var Person = function() { this.name="Allen Kim" }
var me = new Person();
me.name // Allen Kim

只是想了解这个范围在这两种情况下如何工作。

最佳答案

JavaScript 中的每个函数本身就是一个对象。因此,Person.name 从函数本身检索 name 属性,该属性从未设置过;因此未定义

您可以直接尝试我的设置:

Person.name = "John";
Person.name; // "John"
<小时/>

当通过构造函数内分配属性时

this.name = "Allen Kim";

您正在该实例上设置属性。当您使用以下方法实例化对象时:

var me = new Person();

您的构造函数会将 name 属性添加到 me,因为 this 引用正在创建的对象。

<小时/>

以下是 JavaScript 引擎在使用 new 关键字调用构造函数时所采取的基本步骤:

  1. 调用构造函数,并将 this 设置为新的干净对象。
  2. 将新对象的内部 [[Prototype]] 属性设置为构造函数的 prototype (在某些实现中,可以通过 __proto__ 获得该属性)。
  3. 将新对象的 constructor 属性设置为对构造函数的引用(因此您可以访问原型(prototype),而不是非标准的 me.__proto__通过me.constructor.prototype)。
  4. 返回所述对象。

请注意,这是一个非常基本的解释。还有很多其他内容没有包含在这里,但这应该可以让您了解其要点。

关于javascript函数对象和this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14202779/

相关文章:

PHP Javascript 显示/隐藏按钮不起作用

javascript - 中心对齐的跨浏览器问题

javascript - 计算 var 的总和

javascript - 在 AngularJS 指令中定义本地函数的位置

javascript - 如何根据所选的单选按钮调用函数

javascript - 如何使用 css 按钮调用 jquery 函数?

javascript - 用于大型组织结构图的 Canvas 或 SVG(或混合)

javascript - 我如何使用 google home 设备测试我未发布的助手应用程序

javascript - meteor :发布函数返回整个集合而不是一个对象

javascript - 区分 jQuery UI 中的 drop 和 sort sortable()