什么是原型?构造函数或其他对象

What is prototype? Constructor function or a different object?

本文关键字:其他 对象 构造函数 原型 什么      更新时间:2023-09-26

根据W3学校的这个页面,对象原型是创建对象的构造函数(如果我错误地解释了这一点,请注明)。而且,根据我的一本Javascript书,原型本身就是一个对象。但是,当我这样做时:

.JS:

function helloObject(name , id , age){
    this.name = name;
    this.id = id;
    this.age = age;
}
document.getElementById("testElement").textContent = typeof helloObject;//returns function

我知道原型只不过是构造函数。那么,这两个论点中哪一个是正确的呢?

构造

函数是一个函数。这就是为什么typeof helloObject返回function.每个函数都有一个称为"原型"的属性。此prototype属性是一个对象。你可以写helloObject.prototype来检查它。但是,仅当您使用函数(在您的例子中为 helloObject)作为构造函数(即使用关键字 new 时,才使用原型对象。因此,当您运行 var obj = new helloObject() 时,obj变量中有一个新对象,并且该对象具有您的name, id, age属性。但隐含地,javascript 将__proto__属性写入新对象prototype并将构造函数的属性分配给__proto__。在控制台中查看以下内容:

function helloObject(name) {
    this.name = name;
}
var obj = new helloObject('Your name');
console.log(helloObject.prototype)
console.log(obj.__proto__)
console.log(helloObject.prototype === obj.__proto__) // = true

Prototype JavaScript 中通常用于继承的函数的属性。这里有几篇文章可以帮助更好地理解prototype

http://code.tutsplus.com/tutorials/prototypes-in-javascript--net-24949

https://javascriptweblog.wordpress.com/2010/06/07/understanding-javascript-prototypes/