您应该在什么时候使用;原型;在javascript中进行对象扩充时?
我对javascript中的“原型”概念感到困惑 当我定义一个对象时,以下两项似乎都起作用:您应该在什么时候使用;原型;在javascript中进行对象扩充时?,javascript,oop,prototype,Javascript,Oop,Prototype,我对javascript中的“原型”概念感到困惑 当我定义一个对象时,以下两项似乎都起作用: myObject = {}; myObject.prototype.method1 = function() { ... }; myObject.prototype.method2 = function() { ... }; myObject.prototype.method3 = function() { ... }; 而且 myObject = {}; myObject.method1 = fun
myObject = {};
myObject.prototype.method1 = function() { ... };
myObject.prototype.method2 = function() { ... };
myObject.prototype.method3 = function() { ... };
而且
myObject = {};
myObject.method1 = function() { ... };
myObject.method2 = function() { ... };
myObject.method3 = function() { ... };
有人能解释一下吗?这两种创建对象的方法到底有什么区别?为什么我会选择其中一种而不是另一种?(我内心有一种感觉,这很重要……)
谢谢 您应该仅在上使用
prototype
属性,而不是在对象实例中使用,例如:
function Test () {}
Test.prototype.method1 = function () {/*...*/};
var obj = new Test();
构造函数函数的prototype
属性由new
操作符在创建新对象实例时使用
所有本机对象都有一个隐藏链接,用于构建原型链
对象之间的这个隐藏链接是[[Prototype]]
内部属性,而新的
操作符是唯一可以设置它的操作符
在上面的示例中,obj
与其构造函数原型在内部关联,method1
可从obj
访问,但它物理上不存在于该对象上,该方法存在于测试.prototype
对象上,并通过原型链检索,例如:
在对象实例上,指定原型
属性毫无意义,它将与任何其他属性名称一样:
var myObject = {};
myObject.prototype = "foo";
myObject.bar = "bar";
// myObject is simply {"prototype":"foo","bar":"bar"}
第二种方法仅向该对象添加方法。第一种方法使它可用于使用此“类型”创建的其他对象,这些对象使用
new
。将多次添加内部添加的方法到构造函数内的每个实例,方法是:this.fn=function(){…};这对于拥有由实例方法访问的私有实例变量非常有用。
var myObject = {};
myObject.prototype = "foo";
myObject.bar = "bar";
// myObject is simply {"prototype":"foo","bar":"bar"}