声明有和没有原型的变量有什么区别
Whats the difference declaring variables with and without prototypes
(通过原型)之间有什么区别
var Todo = {};
Todo.prototype.name = "...";
Todo.prototype.hello = function() { ... }
Vs(变量和函数"外部"对象)
var Todo = {}
Todo.name = "..."
Todo.hello = function() { ... }
甚至以下:对象中的变量和函数
var Todo = {
name: "...",
hello = function() { ... }
}
想像
使用 prototype 声明的属性或函数是 Todo 的实例成员。
声明没有原型的属性或函数是 Todo 的静态成员。
第一个没有意义,因为你正在处理一个对象实例(({}) instanceof Object === true
),它不会有一个prototype
属性(Object
有)。
您可能正在询问这两种模式之间的区别...
var ObjA = function() {
this.method = function() {};
};
var ObjB = function() {};
ObjB.prototype.method = function() {};
jsFiddle。
前者在实例化时将使用更多内存 - 每个对象都有自己的method
。后者不会各自有自己的method
,method
存在于prototype
对象上,当它试图在父链上访问时,它是原型链上的下一个命令。
Todo.prototype
也是一个对象,所以区别在于如果你用原型声明属性,那么从这个原型创建的每个对象都会拥有这个属性,否则,属性仅用于Todo
对象本身。
方法 #
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
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- 什么是&&在没有if的行中的变量之间
- 什么'它的意思是当一个变量位于括号外时
- 在Javascript中重新分配对象变量时,原始对象会发生什么
- 未设置变量的赋值| jQuery的作用是什么
- 在Javascript中,变量前面的+运算符是什么
- 在javascript中,在变量名之前使用var有什么区别/优势吗
- 什么's;var'声明的变量和'这'在Javascript中创建了属性
- 当我想发布一个变量但有 1 个 js 时,ajax post 的解决方案是什么
- 有什么区别!!变量和变量
- 返回多个变量的 JavaScript 函数:数组与对象.最佳实践是什么
- JavaScript 构造函数中的“var”变量会发生什么
- 在 HTML 中显示变量的好做法是什么?
- 什么's是处理多个js文件之间交互的简单方法,同时避免溢出全局变量
- javascript中if(变量)的确切否定是什么
- jQuery变量$$符号是什么意思
- 将密码存储在Javascript变量中的安全含义是什么
- 闭包中的本地变量从外部更改.这是一个javascript错误,或者我做错了什么
- 如果我不这样做会发生什么;t在javascript中的变量中分配新的Image
- 通过Javascript传递带参数的变量:什么是undefined