原型和用法 Javascript
Prototypes and usage Javascript
下面有一段代码:
function Foo(name){
this.name = name;
}
Foo.prototype.myName = function() {
return this.name;
}
function Bar(name, label){
Foo.call(this, name);
this.label = label;
}
Bar.prototype = Object.create(Foo.prototype);
Bar.prototype.myLabel = function(){
return this.label;
}
var a = new Bar("a" , "obj a");
a.myName();
a.myLabel();
好的,现在按照我的理解
- 它创建了一个函数
Foo
来设置名称
- 它在 Foo 的链接原型对象上创建了一个函数
myName
。
- 它创建了一个函数
Bar
,它只设置标签并使用函数 Foo 的功能来设置名称,而不是自己设置。
- 那么Foo和Bar之间就建立了原型联动。所以我假设 Foo 和 Bar 有两个独立的原型对象相互链接。
- 现在 Bar 的原型对象内部有一个函数
myLabel
。
- 调用 new Bar 会创建一个新对象
a
并将其原型对象链接到 Bar 的原型。
所以要点是:
Foo 的原型包含一个 get 函数 - myName
Foo 本身只是设置了一个 属性- name
Bar 的原型有一个 get 函数 - myLabel
Bar 本身只是设置一个 属性 - mylabel
对象 a's
原型链接到 Bar's prototype
,后者本身链接到 Foo's prototype
。所以总共有三个原型对象。
这样的思路正确吗?请纠正或添加一些内容以启发讨论。我对这门语言相当陌生,它的细微差别几乎没有使用 cases/practical 原型示例。
首先要枚举Foo.prototype
:
Foo.prototype = { constructor: Foo, myName: function() { return this.name}};
然后 Bar
调用 Foo
将 'name' 应用于正在构造的 Bar 实例,而不是自己执行,然后再将其第二个参数设置为新的 Bar
对象 属性.
但是 Bar.prototype
被设置为 {}
典型地继承自 Foo.prototype
。例如,Bar.prototype.constructor == Foo; // true
Bar.prototype
分配了一个本地自己的 属性 方法 myLabel
,可由 Bar
个对象继承,但不能由 Foo
个对象继承。
所以第 1、2、3 点是正确的。
第 4 点不正确。建立了原型继承,使得 Bar.prototype
继承自 Foo.prototype
。它不是相互的,是一种单向继承:JavaScript 不支持任何类型的双向原型继承。
第 5 点和第 6 点是正确的。
下面有一段代码:
function Foo(name){
this.name = name;
}
Foo.prototype.myName = function() {
return this.name;
}
function Bar(name, label){
Foo.call(this, name);
this.label = label;
}
Bar.prototype = Object.create(Foo.prototype);
Bar.prototype.myLabel = function(){
return this.label;
}
var a = new Bar("a" , "obj a");
a.myName();
a.myLabel();
好的,现在按照我的理解
- 它创建了一个函数
Foo
来设置名称 - 它在 Foo 的链接原型对象上创建了一个函数
myName
。 - 它创建了一个函数
Bar
,它只设置标签并使用函数 Foo 的功能来设置名称,而不是自己设置。 - 那么Foo和Bar之间就建立了原型联动。所以我假设 Foo 和 Bar 有两个独立的原型对象相互链接。
- 现在 Bar 的原型对象内部有一个函数
myLabel
。 - 调用 new Bar 会创建一个新对象
a
并将其原型对象链接到 Bar 的原型。
所以要点是:
Foo 的原型包含一个 get 函数 -
myName
Foo 本身只是设置了一个 属性- name
Bar 的原型有一个 get 函数 -
myLabel
Bar 本身只是设置一个 属性 - mylabel
对象
a's
原型链接到Bar's prototype
,后者本身链接到Foo's prototype
。所以总共有三个原型对象。
这样的思路正确吗?请纠正或添加一些内容以启发讨论。我对这门语言相当陌生,它的细微差别几乎没有使用 cases/practical 原型示例。
首先要枚举Foo.prototype
:
Foo.prototype = { constructor: Foo, myName: function() { return this.name}};
然后 Bar
调用 Foo
将 'name' 应用于正在构造的 Bar 实例,而不是自己执行,然后再将其第二个参数设置为新的 Bar
对象 属性.
但是 Bar.prototype
被设置为 {}
典型地继承自 Foo.prototype
。例如,Bar.prototype.constructor == Foo; // true
Bar.prototype
分配了一个本地自己的 属性 方法 myLabel
,可由 Bar
个对象继承,但不能由 Foo
个对象继承。
所以第 1、2、3 点是正确的。
第 4 点不正确。建立了原型继承,使得 Bar.prototype
继承自 Foo.prototype
。它不是相互的,是一种单向继承:JavaScript 不支持任何类型的双向原型继承。
第 5 点和第 6 点是正确的。