(通过原型)之间的区别是什么
var Todo = {};
Todo.prototype.name = "...";
Todo.prototype.hello = function() { ... }
Vs(变量和功能“在”对象之外)
var Todo = {}
Todo.name = "..."
Todo.hello = function() { ... }
甚至以下:变量&对象中的函数
var Todo = {
name: "...",
hello = function() { ... }
}
答案 0 :(得分:2)
第一个没有意义,因为你正在处理一个对象实例(({}) instanceof Object === true
),它没有prototype
属性(Object
确实如此)。
您可能正在询问这两种模式之间的区别......
var ObjA = function() {
this.method = function() {};
};
var ObjB = function() {};
ObjB.prototype.method = function() {};
前者在实例化时会使用更多内存 - 每个对象都有自己的method
。后者不会各自拥有自己的method
,method
存在于prototype
对象上,当它试图在父对象上访问时,它是原型链中的下一个命令
答案 1 :(得分:2)
想想
使用prototype声明的属性或函数是Todo的实例成员。
没有原型声明的属性或函数是Todo的静态成员。
答案 2 :(得分:0)
Todo.prototype
也是一个对象,所以区别在于如果使用prototype声明属性,那么从这个原型创建的每个对象都将具有该属性,否则,该属性仅用于Todo
对象自我。
答案 3 :(得分:0)
方法#1和#2(几乎与示例#3相同)之间的显着差异在于new
关键字,如果您通过原型扩展函数,则需要使用该关键字,例如
var Todo1 = function() {};
Todo1.prototype.name = "Foobar";
var Todo2 = {name: "Foobar" }
var a = Todo1;
console.log(a.name); // no property retrieved
var b = Todo2;
console.log(b.name); // Foobar
var c = new Todo1;
console.log(c.name); // Foobar