Javascript oops:定义带或不带原型的函数

时间:2013-03-28 05:20:20

标签: javascript oop

以下是我的课程:

function myfunc(){
    // some code
}

1)声明类的方法/功能

myfunc.getInstance = function(){
          // some code
};

或者我可以定义如下:

myfunc.prototype.getInstance = function(){
    // some code
};

请告诉我使用或不使用原型定义方法/功能有什么区别。

2 个答案:

答案 0 :(得分:1)

myfunc.prototype.getInstance = function(){ // some code };

如果创建任何继承myfunc的对象,它将能够使用原型链访问getInstance方法。新对象的__ proto __将指向其父对象的原型,即myfunc的

myfunc.getInstance = function(){
      // some code};

getInstance方法不能被继承,因此只有myfunc可以调用它,而不能继承它的对象。

示例

function myfunc(){

}

myfunc.getInstance = function(){
    console.log("I can be invoked only by myfunc")
}

myfunc.prototype.getInstance2 = function(){
    console.log("I can be inherited and called by other objects too")
}

let newobj = new myfunc();

newobj.getInstance2();

// I can be inherited and called by other objects too


newobj.getInstance();
// Uncaught TypeError: newobj.getInstance is not a function

myfunc.getInstance();
// I can be invoked only by myfunc

答案 1 :(得分:0)

原型函数意味着在类的对象上调用(就像OOP中的普通类)。正常函数可以直接在类上调用(如OOP中的静态类)。

function Foo ()
{
}

//Should be called through Foo.SayHello()
Foo.SayHello = function ()
{

}


/*
Should be called on the object of Foo
var MyObject = new Foo();
MyObject.SayHello();
*/

Foo.prototype.SayHello = function ()
{
}