Javascript静态方法与实例方法

时间:2018-05-09 11:07:17

标签: javascript

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

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

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

如果它是静态方法(不使用任何实例数据),则将其声明为静态方法,然后直接调用它。

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

有人可以用示例解释静态和实例方法之间的区别吗?我们如何在javascript中调用静态和实例方法

3 个答案:

答案 0 :(得分:1)

对于Javascript特定答案,请访问此link(我通过Google搜索找到它)似乎很好。

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

答案 1 :(得分:1)

这个答案不是针对Javascript,而是针对OOP。

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

实例方法

您可以在daniel上调用方法,例如:daniel.talk(),以便daniel开始说话......

静态方法

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

(简单来说,像getPeopleFromNewYork()这样的方法属于某种存储库,但它仅用于示例。)

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

答案 2 :(得分:0)

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关键字创建此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()); // 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”关键字。

我认为这会帮助您...