gpt4 book ai didi

javascript - 为什么构造函数中 this.prototype 未定义?

转载 作者:行者123 更新时间:2023-11-28 17:26:52 24 4
gpt4 key购买 nike

tl;dr:可以使用 Object.getPrototypeOf(this) 在其构造函数中访问对象prototype。它不是简单的:this.prototype。为什么?

我有一个简单的问题。我认为 Ecmascript-5 专家将帮助我阐明这个神秘的this

我的目标是编写一些引用代码,通过嵌入在 IIFE(立即调用函数表达式)中的构造函数来声明类,并将此教学模式应用为模板需要的时候。这个构造的好处是它允许声明实例和类数据。在原型(prototype)对象中拥有所有方法也很好。 Here is what I came up with :

var Person = (function(){
// class scope variables
var persons = [];
// constructor with variables
return function(name, age){
// gets the prototype of Object: useful for defining methods
// could also be: proto = Person.prototype
var proto = Object.getPrototypeOf(this);
// instance variable
this.name = name;
this.age = age;
persons.push(this);
// method which accesses to both class and instance variables
if (!proto.stats) // avoids re-inventing the wheel upon each New
proto.stats = function() {
for(var acc=0, n=0; n<persons.length; n++)
acc+=persons[n].age;
return this.name + ": " +
this.age + " (average: " + acc/n + ")";
};
return this; // not required, just to remember what it does normally
};
})(); // IIFE
// a classic method (cannot access class variables)
Person.prototype.toString = function(){
return this.name + ": " + this.age + " years old";
};

我实现了我的目标,并且这种模式看起来相当可扩展,方法位于原型(prototype)对象而不是实例中。然而,有些事情对我来说仍然很奇怪:我首先想简单地使用 constructor 中的 var proto = 声明和使用 proto >this.prototype。但它是未定义。怎么会这样?

旁注:我在类似的问题中发现了一些提示,但据我了解,与我的没有任何相似之处。

感谢您的时间、知识和关注。

最佳答案

尝试遵循下面的示例。我还推荐你读一下这本书http://shop.oreilly.com/product/9780596517748.do了解您在 JavaScript 中所做的事情。

function Car() {
console.log(this) // I'm the new Car "instance"
console.log(typeof this) // I'm of type object
console.log(this instanceof Car) // but I'm an instance of Car
console.log(this.prototype) // I'm undefined because __proto__ is the reference to the prototype
console.log(this.__proto__) // This is the prototype
}

Car.prototype.drive = function drive() {
console.log('I\'m driving')
}

const fiat = new Car()
fiat.drive()

干杯,

Ember

关于javascript - 为什么构造函数中 this.prototype 未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51358013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com