【问题标题】:Javascript Static Method vs Instance MethodJavascript 静态方法与实例方法
【发布时间】:2018-05-09 11:07:16
【问题描述】:

所以我是 javascript(或任何编程语言)的新手,随着我的进步,我听到了新的关键字。

我在 Stackoverflow 上解决了这个问题:How to access a method from a class from another class?

回复或回答者在哪里写了这样的东西..

如果是静态方法(不使用任何实例数据),则声明为静态方法,直接调用即可。

如果它是一个实例方法,那么您通常会创建一个类型为 1 的对象,然后在该对象上调用该方法(通常在构造函数中)。

谁能用例子解释一下静态方法和实例方法的区别?我们如何在javascript中调用静态和实例方法

【问题讨论】:

标签: javascript


【解决方案1】:

这个答案不适用于 Javascript,而是一般的 OOP。

想象一下,你有一个班级Person。该类的一个实例可能是daniel

实例方法

你可以在daniel 上调用一个方法,例如:daniel.talk(),所以daniel 开始说话...

静态方法

您可以在类Person 上调用静态方法,而不是在具体实例上调用,例如:Person.getPeopleFromNewYork()。请注意,getPeopleFromNewYorkPerson 的任何实例无关,而是与类本身相关。

(通常,getPeopleFromNewYork() 之类的方法属于某种存储库,但这只是示例。)

了解静态方法的另一个说明性示例是 Math.sum(2, 5)Random.randomInt()

【讨论】:

  • 你的最后一行让我明白了。谢谢。
【解决方案2】:

对于 Javascript 特定的答案,请访问此link(我通过谷歌搜索找到它)看起来不错。

但无论您选择哪种面向对象的编程语言;通常,您会为不需要知道类的其他字段/属性状态的功能使用静态方法。例如,将一个长度单位转换为另一个长度单位不需要知道对象的其他属性是什么。另一方面,假设我们有一个 Customer 类,其属性为 first name 和 last name。现在,如果您需要通过连接名字和姓氏来派生全名,您可以在类 GetFullName() 上创建一个方法,该方法不接受参数并为您完成工作。因此,在 Customer 类型的对象上,您可以使用不带任何参数的 object.GetFullName() 来获取全名。当然,您可以为相同的目的编写一个静态方法,但是您必须将参数传递给该方法。对于依赖大量参数的方法来说,会比较麻烦。

【讨论】:

    【解决方案3】:

    Javascript 有两种类型的属性和方法。您可以使用静态和实例两种类型的属性和方法。

    首先您需要知道如何在 javascript 中定义对象。两种主要方式是使用 {} 或使用构造函数。在 {} 中,每个属性和方法都是静态的,您不能创建它的实例,例如:

    <script> 
    
    var person = {name:"Chayon Shaah",age:"30",say:function(){return "Hello "+this.name}} 
    alert(person.say()); // will allert "Hello Chayon Shaah"
    
    </script>
    

    只看代码,这里你需要通过对象引用来调用任何属性或方法,并且不能使用new关键字创建这个人对象的任何实例

    现在看看构造函数,它是如何创建实例的:

    <script>
    function Person(){
     this.name="Chayon Shaah",
     this.age = 30,
     this.say = function(){
     return "Hello "+this.name;
     }
    
    }
    
    var obj = new Person();
    alert(obj.say()); // will alert "Hello Chayon Shaah"
    
    </script>
    

    这里所有的Person对象属性和方法都可以被“obj”访问,它是Person对象的一个​​实例。

    Person 对象不能直接访问它们,只有它的任何实例可以访问它们。另一方面,您可以对 Person 对象使用静态属性或方法,该对象只能通过其自身而不是其任何实例进行访问。

    让我们在 Person 对象中添加更多实例属性和静态属性...

    <script>
    function Person(){
     this.name="Chayon Shaah",
     this.age = 30,
     this.say = function(){
     return "Hello "+this.name;
     }
    
    }
    
    var obj = new Person();
    alert(obj.say());
    
    Person.prototype.city = "Mymensingh"; // only can be used by all instances of Person object (non static property).
    
    
      alert(obj.city); // Will alert "Mymensing" (Calling via instance of Person)
    
    Person.location = "Bangladesh"; //This is a static property which can not be accessed by any instance of Person object, Only accessed by Person Object.
     `alert(Person.location); // Will alert "Bangladesh" (Calling directly via` Person object)
    </script>
    

    使用“prototype”关键字创建任何实例方法或具有主对象名称的属性,如果您想创建静态属性和方法,则只需使用名称而不使用“prototype”关键字,如示例。

    我认为它会帮助你......

    【讨论】:

      猜你喜欢
      • 2012-11-12
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多