在 JavaScript 中,当我们实例化派生对象时,原型的函数隐藏在哪里
In JavaScript, where do prototype's functions hide when we instantiate the derived object?
我目前正在尝试弄清楚原型继承在JavaScript中是如何工作的。这是我目前试图解开的谜团。
假设我们设置了以下结构:
var base = { greet : "hello" }
var child = function () {}
child.prototype = base;
child.prototype.protoSomething = function () {}
var instance = new child();
没什么好看的。现在让我们看看instance
属性(自己的或其他)有什么:
for(prop in instance) {
console.log(prop); // prints 'greet', 'protoSomething'
}
好吧,所以它有greet
和protoSomething
,他们是instance
自己的成员吗?
for(prop in instance) {
if(instance.hasOwnProperty(prop))
console.log(prop); // nothing is printed
}
不,自己的属性列表是空的。它们在instance
的原型中吗?
if(instance.prototype === undefined) {
console.log("'instance' has no prototype"); // gets printed
}
好吧,无赖,instance
没有分配原型。那么,如果属性不是拥有的,也没有原型,它们从何而来?我觉得在这一点上某种图表会非常好。
只有函数具有属性prototype
。
instance.constructor.prototype === base // return true
若要获取对象的原型,应使用 Object.getPrototypeOf 方法。
Object.getPrototypeOf(instance) === base // return true
此页面应该可以帮助您:
http://joost.zeekat.nl/constructors-considered-mildly-confusing.html
简而言之,实例的"幕后"原型(通过new
创建)无法以任何方式访问,因此它返回undefined
。只有构造函数(已在其上手动设置 .prototype
属性)在尝试检索时返回任何内容。
相关文章:
- 使用方括号访问插件原型函数
- 使用setInterval调用原型函数时出现问题
- 无法从angularjs调用JavaScript原型函数
- AngularJS ng repeat显示原型函数未定义
- 在 Redux 状态下存储具有原型函数的对象
- Javascript 中的构造函数不会返回由原型函数传递的正确值
- JavaScript:在哪里放置原型函数
- 创建所有原型函数均可访问的局部变量
- 可以'这'在原型函数中未定义
- 使用特权Getter/Setter函数的JavaScript原型函数
- Javascript、node、Q promise、原型函数和“;这个“;
- 在Javascript中将对象原型函数绑定到对象
- 从node.js模块中向JSON添加原型函数
- 从另一个(包括其自身)触发一个原型函数
- Javascript原型继承原型函数调用
- JavaScript–从另一个原型函数调用原型的一个函数
- 访问原型函数中的私有成员
- 如何在AngularJS中将依赖关系传递给原型函数
- 这两种用 JavaScript 编写原型函数的方式有什么区别?
- 为什么不能使用lambda来定义原型函数