在以下两种情况下,这有什么区别?
情况1
var Person = function() { this.name="Allen Kim" }
Person.name; //undefined
Run Code Online (Sandbox Code Playgroud)
案例2
var Person = function() { this.name="Allen Kim" }
var me = new Person();
me.name // Allen Kim
Run Code Online (Sandbox Code Playgroud)
只想了解这个范围如何适用于这两种情况.
JavaScript中的每个函数本身都是一个对象.所以从函数本身Person.name检索name属性,从未设置; 因此undefined.
您可以直接尝试此设置:
Person.name = "John";
Person.name; // "John"
Run Code Online (Sandbox Code Playgroud)
从构造函数中分配属性时
this.name = "Allen Kim";
Run Code Online (Sandbox Code Playgroud)
你正在该实例上设置属性.然后,当您使用以下实例化对象时:
var me = new Person();
Run Code Online (Sandbox Code Playgroud)
您的构造函数将添加该name属性me,因为this引用了正在创建的对象.
以下是使用new关键字调用构造函数时JavaScript引擎采取的基本步骤:
thisset 调用构造函数为新的干净对象.[[Prototype]]将新对象的内部属性设置为构造函数prototype(在某些实现中,然后可以通过它__proto__).constructor新对象的属性作为对构造函数的引用(因此me.__proto__,您可以通过非标准访问原型me.constructor.prototype).请注意,这是一个非常基本的解释.这里没有其他许多东西,但这应该给你一个要点.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |