【发布时间】:2015-04-20 10:27:02
【问题描述】:
我是 JavaScript 新手,为了理解这个概念,我阅读了很多关于原型和构造函数的文章,但无论我走到哪里,我都会感到困惑。
当人们同时谈论构造函数和原型时,就会产生混淆。
在下面的例子中
var employee = function Emp(name) {
this.name = name;
}
var jack = new employee("Jack Dwain");
employee.constructor //gives Function()
employee.prototype // gives Emp {}
employee.prototype.constructor //gives Emp(name)
jack.constructor //gives Emp(name)
jack.prototype //gives undefined
prototype 是 JS 实现继承的一种方式,因为
Emp(name)是基函数原型,它引用了同一个函数本身。是这样的吗?employee.constructor和employee.prototype.constructor有何不同?为什么
jack.prototype是undefined,即如果它继承自函数Emp(name),为什么它没有引用该函数?如何在不输入控制台的情况下清楚地预测自己的原型或构造函数或prototype.constructor ......产生了什么
【问题讨论】:
-
我认为构造函数是你调用来创建对象的函数。原型定义了对象可以做什么。所以原型比构造函数大。另见:Constructors in JavaScript.
-
这一行:
var employee = function Emp(name) { ... }令人困惑。最好写成function Emp(name) { ... }并且只使用Emp而不是employee。 -
也许这个答案将解释原型继承在 JavaScript 中的工作原理:stackoverflow.com/a/8096017/783743
-
我认为观察者
__proto__而不是prototype用于研究目的更好。这将解释你的最后一行输出。即jack.prototype //gives undefined -
你确定employee.prototype 是一个Emp 对象吗?我认为它是 Object 的一个实例。
标签: javascript prototype