代码1:
var Something = { name: "Name",sayHi: function(){ alert(Something.name); } }
代码2:
function Something(){ this.name = "Name"; } Something.prototype.sayHi = function(){ alert(Something.name); }
编辑:
那么,伙计,你的意思是第二个更好?或更“正式”?
解决方法
基本上在第一个例子中,你声明一个实际上已经是一个对象实例的
object literal.
在第二个例子中,您定义了一个可以与new
运算符一起使用的构造函数来创建对象实例.
对象文字也可用于创建对象的新实例,并进行原型继承,Douglas Crockford也提出了这种技术.
基本上你可以有一个对象运算符:
function object(o) { function F() {} F.prototype = o; return new F(); }
这个帮助功能可以以非常直观和方便的方式使用.
它基本上接收一个对象作为参数,在函数内部创建一个新的对象实例,旧对象被链接到新对象的原型,并返回.
它可以像这样使用:
var oldObject = { firstMethod: function () { alert('first'); },secondMethod: function () { alert('second'); },}; var newObject = object(oldObject); newObject.thirdMethod = function () { alert('third'); }; var otherObject = object(newObject); otherObject.firstMethod();
您可以根据需要进一步扩展,从以前定义的对象创建新实例.
推荐的 :
> Prototypal Inheritance in JavaScript
> Advanced JavaScript (Video)