JavaScript:Object.myMethod vs Object.protoype.myMethod?

hoa*_*atv 2 javascript ajax jquery prototype-programming

当我想Object在JavaScript中向类中添加方法时,我遇到了一个问题.我不知道之间的不同Object.myMethodObject.prototype.myMethod.

Object.myMethod = function (){};

Object.prototype.myMethod = function (){};
Run Code Online (Sandbox Code Playgroud)

谁能帮我吗

Dom*_*nic 6

Object是构造函数.与JavaScript中的所有函数一样,它是一个对象,您可以为其附加属性.这些属性可以是函数.这样做

Object.myMethod = function () { };
Run Code Online (Sandbox Code Playgroud)

附加myMethodObject构造函数,这意味着您可以像这样调用它:

Object.myMethod();
Run Code Online (Sandbox Code Playgroud)

Object.prototype是用作所有JavaScript对象的基础的原型.它本身就是一个对象,所以你可以再添加属性.不同的是,附加到原型的属性通过其内部[[Prototype]]引用被所有对象原型继承,所以这样的事情是可能的:

Object.prototype.myMethod = function () { };

var obj = {};
obj.myMethod();

var otherObj = { something: "else" };
otherObj.myMethod();

var objectViaConstructor = new Object();
objectViaConstructor.myMethod();

var instanceOfSomethingThatInheritsFromObject = new XMLHttpRequest();
instanceOfSomethingThatInheritsFromObject.myMethod();
Run Code Online (Sandbox Code Playgroud)

请注意,上述大部分内容适用于任意构造函数,但您没有获得特殊的对象文字语法,并且Object特殊之处在于所有内容(包括示例XMLHttpRequest)都从中继承.所以:

function MyConstructor() { }
MyConstructor.staticMethod = function () { };
MyConstructor.prototype.method = function () { };

MyConstructor.staticMethod();

var myConstructed = new MyConstructor();
myConstructed.method();
Run Code Online (Sandbox Code Playgroud)