下面两种情况有什么区别?
案例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
关键字调用构造函数时所采取的基本步骤:
- 调用构造函数,并将
this
设置为新的干净对象。 - 将新对象的内部
[[Prototype]]
属性设置为构造函数的prototype
(在某些实现中,可以通过__proto__
获得该属性)。 - 将新对象的
constructor
属性设置为对构造函数的引用(因此您可以访问原型(prototype),而不是非标准的me.__proto__
通过me.constructor.prototype
)。 - 返回所述对象。
请注意,这是一个非常基本的解释。还有很多其他内容没有包含在这里,但这应该可以让您了解其要点。
关于javascript函数对象和this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14202779/