根据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
我得到的原型只不过是构造函数。那么,这两个论点中哪一个是正确的?
答案 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/