为什么直接在函数上添加方法没有像 function.prototype 那样工作?
Why adding a method on function directly did not work like function.prototype?
我正在学习并试图深入理解 JavaScript 对象。我通过下面的示例学习了 Object prototype
。
var MyObj = function(){
this.Name = "Whosebug";
}
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
对象无法访问 Object
的 getOwnPropertyNames
。因为 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.
如何使 MyDream.method
在此示例中起作用?
您可以这样做,例如:
instanceSample.prototype.method = function( x ){
...
}
原型意味着方法"method"将被添加到class"MyDream"
的所有对象
除了解释 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。它们功能强大且灵活。因此,作为第一个 class 对象,您可以像以前一样将它们分配给变量。您可以将它们作为参数传递。除此之外,您还可以将原型链扩展为
MyDream.prototype.canAccessThisMethod = function(x){ };
我相信您已经弄清楚了其余的内容,因此跳过细节并快进到此声明。
MyDream.method(blabla);
不幸的是,这行不通。原因是,要添加 function as method 您需要将其分配为函数文字。您可以像 Objects
.
添加方法来发挥作用
MyDream.method = function(x) {
console.log(x);
}
MyDream.method("bla bla");
我正在学习并试图深入理解 JavaScript 对象。我通过下面的示例学习了 Object prototype
。
var MyObj = function(){
this.Name = "Whosebug";
}
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
对象无法访问 Object
的 getOwnPropertyNames
。因为 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.
如何使 MyDream.method
在此示例中起作用?
您可以这样做,例如:
instanceSample.prototype.method = function( x ){
...
}
原型意味着方法"method"将被添加到class"MyDream"
的所有对象除了解释 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。它们功能强大且灵活。因此,作为第一个 class 对象,您可以像以前一样将它们分配给变量。您可以将它们作为参数传递。除此之外,您还可以将原型链扩展为
MyDream.prototype.canAccessThisMethod = function(x){ };
我相信您已经弄清楚了其余的内容,因此跳过细节并快进到此声明。
MyDream.method(blabla);
不幸的是,这行不通。原因是,要添加 function as method 您需要将其分配为函数文字。您可以像 Objects
.
MyDream.method = function(x) {
console.log(x);
}
MyDream.method("bla bla");