gpt4 book ai didi

php - Javascript 原型(prototype)是否类似于 PHP 静态方法?

转载 作者:行者123 更新时间:2023-11-30 10:33:14 25 4
gpt4 key购买 nike

我正在学习一些 Javascript,但我对prototype

有疑问

在这种情况下,原型(prototype)是否类似于 PHP 静态方法,因为所有实例都共享它?

Javascript

var Person = function(){
this.name = "Test Person";
}

Person.prototype.work = function(){
return this.name + "is working";
}

PHP

class Person($personName){

public static working(){
return $personName . "is working";
}
}

$person1 = new Person("Joe").working();
$person2 = new Person("Mike").wokring();

最佳答案

技术上的答案是否定的。原型(prototype)函数的底层实现与类 C 语言中静态方法的实现不同。

...然而,在实践中,您可以认为它们的一般用法类似于 public-static方法。
与公共(public)静态成员相比,原型(prototype)属性更相似。

它们的调用方式不同,但是方法或属性的概念位于“类”/构造函数上,每个实例都可以访问,并且修改这些值,作为共享值,影响所有其他instances 非常非常像 public static .

不过,还有一些其他事项需要牢记,这与您认为 public static 的功能一致。是,取决于你使用的语言......

当然,最重要的是,就原型(prototype)函数而言,它们绝对无法访问任何私有(private)/特定于实例的状态,这些状态不可公开访问 .
所以如果你习惯于处理 public static可能能够调用私有(private)方法或使用特定于实例的变量(不是公共(public)成员)的函数,那么你 120% 运气不好。

要考虑的第二件事是,您还可以通过闭包创建公共(public)和私有(private)静态成员/方法的等价物。

var Class = (function () {
var private_static_method = function () {},
public_static_method = function () {},
private_static_property = 1,
public_static_property = 2,

class_constructor = function (a, b) {
var private_method = function () {},
public_method = function () {},
public_property = a,
private_property = b,

public_interface = {
method : public_method,
property : public_property
};

return public_interface;
};

class_constructor.method = public_static_method;
class_constructor.property = public_static_property;
return class_constructor;
}());

现在,通过闭包,我获得了“私有(private)静态”函数和属性,每个私有(private)实例都可以访问它们。
我有公共(public)静态方法,我已将其附加为构造函数的方法。
然后我得到了不使用 new 的构造函数, 并创建一个新对象 ( public_interface ), 它可以附加任何你想要的东西。
由于闭包,实例的任何公共(public)方法都可以访问该实例的任何私有(private)方法/变量。

这些都与传统类(class)无关。
但从纯粹基于闭包的 Angular 来看,这就是您如何重新创建所有这些访问类型,而不会把自己逼疯,试图将类硬塞到 JS 中。

关于php - Javascript 原型(prototype)是否类似于 PHP 静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15608255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com