Javascript 声明有原型和没有原型的变量有什么区别
(通过原型)之间有什么区别 Vs(变量和函数“外部”对象) 或者甚至包括以下内容:对象中的变量和函数Javascript 声明有原型和没有原型的变量有什么区别,javascript,Javascript,(通过原型)之间有什么区别 Vs(变量和函数“外部”对象) 或者甚至包括以下内容:对象中的变量和函数 var Todo = { name: "...", hello = function() { ... } } Todo.prototype也是一个对象,因此区别在于,如果您使用prototype声明属性,那么从该原型创建的每个对象都将拥有该属性,否则,该属性仅用于Todo对象本身。在处理对象实例(({})时,第一个属性没有意义instanceof Object===true),
var Todo = {
name: "...",
hello = function() { ... }
}
Todo.prototype
也是一个对象,因此区别在于,如果您使用prototype声明属性,那么从该原型创建的每个对象都将拥有该属性,否则,该属性仅用于Todo
对象本身。在处理对象实例(({})时,第一个属性没有意义instanceof Object===true
),它将不具有prototype
属性(Object
有)
你可能会问这两种模式之间的区别
var ObjA = function() {
this.method = function() {};
};
var ObjB = function() {};
ObjB.prototype.method = function() {};
前者在实例化时将使用更多内存-每个对象都有自己的
方法
。后者不是每个都有自己的方法
,方法
存在于原型
对象上,当它试图在父对象上访问时,它是原型链上的下一个in命令。方法#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
想一想
使用prototype声明的属性或函数是Todo的实例成员
未声明prototype的属性或函数是Todo的静态成员。示例2和3几乎相同。第一个属性或函数甚至不起作用,因为默认情况下对象实例没有prototype属性。
var ObjA = function() {
this.method = function() {};
};
var ObjB = function() {};
ObjB.prototype.method = function() {};
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