为什么一个函数中创建的属性和方法没有显示在该函数原型的构造函数属性中?
Why are the properties and methods created in a function not shown in the constructor property of the prototype of that function?
function protoFunc(name) {
this.name;
this.getName = function () {
return this.name;
}
}
这里我创建了一个构造函数。现在,这个构造函数有一个原型 属性,它包含一个对象,您可以在该对象上定义要继承的成员,即方法和属性。其中一个成员是 'constructor' 属性,它指向函数本身。
那么,为什么在原型 属性 和构造函数 属性 中都看不到我刚刚在函数中创建的方法和属性?
我刚看到这个:
arguments: null
caller: null
length: 1
name: "protoFunc"
prototype:
constructor: ƒ protoFunc(name)
__proto__: Object
__proto__: ƒ ()
我刚刚创建的方法在哪里?
您编写的代码没有向原型添加任何内容。相反,它将属性添加到每个实例。也就是说,如果有人打电话
const a = new protoFunc('bob');
那么a
就会直接在上面有一个.name
和一个.getName
属性。它不会通过原型链获得这些,并且在您调用 new
.
之前它们不存在
如果你想让getName
在原型链上,你需要把你的代码改成这样:
function protoFunc(name) {
this.name = name;
}
protoFunc.prototype.getName = function () {
return this.name;
}
注意:我将 protoFunc 中表示 this.name
的行更改为 this.name = name
,因为这可能就是您想要做的。
function protoFunc(name) {
this.name;
this.getName = function () {
return this.name;
}
}
这里我创建了一个构造函数。现在,这个构造函数有一个原型 属性,它包含一个对象,您可以在该对象上定义要继承的成员,即方法和属性。其中一个成员是 'constructor' 属性,它指向函数本身。
那么,为什么在原型 属性 和构造函数 属性 中都看不到我刚刚在函数中创建的方法和属性?
我刚看到这个:
arguments: null
caller: null
length: 1
name: "protoFunc"
prototype:
constructor: ƒ protoFunc(name)
__proto__: Object
__proto__: ƒ ()
我刚刚创建的方法在哪里?
您编写的代码没有向原型添加任何内容。相反,它将属性添加到每个实例。也就是说,如果有人打电话
const a = new protoFunc('bob');
那么a
就会直接在上面有一个.name
和一个.getName
属性。它不会通过原型链获得这些,并且在您调用 new
.
如果你想让getName
在原型链上,你需要把你的代码改成这样:
function protoFunc(name) {
this.name = name;
}
protoFunc.prototype.getName = function () {
return this.name;
}
注意:我将 protoFunc 中表示 this.name
的行更改为 this.name = name
,因为这可能就是您想要做的。