我正在学习并尝试深入理解JavaScript对象。我通过以下示例了解了Object prototype
。
var MyObj = function(){
this.Name = "Stackoverflow";
}
MyObj.prototype.prop = "OK";
var instance = new MyObj();
instance.prop = "OK";
console.log(instance.hasOwnProperty("Name")); //true
console.log(Object.getOwnPropertyNames(instance)); //[ 'Name', 'prop' ]
在上面的示例中,instance
对象无法访问getOwnPropertyNames
的{{1}}。因为Object
函数不是getOwnPropertyNames
原型的成员。在此之后,当我像Object
上面写我自己的对象时,例如
Object
如何在此示例中使var MyDream = function(){}
MyDream.prototype.canAccessThisMethod = function(x){};
var instanceSample = new MyDream();
instanceSample.canAccessThisMethod("blabla"); //because of prototype
MyDream.method(blabla); // didn't work.
正常工作?
答案 0 :(得分:1)
您可以这样做,例如:
instanceSample.prototype.method = function( x ){
...
}
原型意味着方法"方法"将添加到班级的所有对象" MyDream"
答案 1 :(得分:1)
除了解释prototypes
之外,让我们关注你在以下片段中提出的问题,即
var MyDream = function(){}
MyDream.prototype.canAccessThisMethod = function(x){ };
var instanceSample = new MyDream();
instanceSample.canAccessThisMethod("blabla"); //because of prototype
MyDream.method(blabla); //How can we write "MyDream.method" in this example
让我们一步一步走。
var MyDream = function(){}
您创建了一个匿名函数并将其分配给MyDream
变量。 Functions are first class objects in JavaScript。它们功能强大且灵活。因此,作为第一类对象,您可以将它们分配给您所做的变量。您可以将它们作为参数传递。最重要的是,您还可以将原型链扩展为
MyDream.prototype.canAccessThisMethod = function(x){ };
我相信你已经找到了剩下的东西,所以跳过细节,快速转向这个陈述。
MyDream.method(blabla);
不幸的是,这不起作用。原因是,要添加function as method,您需要将其指定为函数文字。您可以像Objects
一样添加方法。
MyDream.method = function(x) {
console.log(x);
}
MyDream.method("bla bla");