什么是原型?构造函数还是不同的对象?

时间:2016-02-21 12:53:38

标签: javascript

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

JS:

function helloObject(name , id , age){
    this.name = name;
    this.id = id;
    this.age = age;
}

document.getElementById("testElement").textContent = typeof helloObject;//returns function

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

1 个答案:

答案 0 :(得分:3)

构造函数是一个函数。这就是typeof helloObject返回function的原因。 每个函数都有一个名为" prototype"的属性。此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/