长话短说:我的情况是我喜欢PHP式的getter,但是在JavaScript中.
我的JavaScript只在Firefox中运行,因此我可以使用Mozilla特定的JS.
我可以找到制作JS getter的唯一方法是需要指定它的名称,但是我想为所有可能的名称定义一个getter .我不确定这是否可行,但我非常想知道.
可能重复:
所有属性的JavaScript getter
JavaScript是否提供了访问未定义对象属性的方法?在PHP中,解决方案是__get()在类中声明和实现方法.
使用try { .. } catch { .. }的解决方案对我来说还不够,因为我已经拥有非常大量的代码,而这些代码实际上需要保持原样.
在PHP中至少在我的实例中,使用魔术方法是很常见的 - 至少在定义核心类时,大多数其他内容都将从中扩展.
php中的魔术方法以常规方法的规范以特殊方式运行.例如,我书中最常用的方法之一就是__construct()
每次加载一个类时都会执行该构造.因此,例如,如果您希望您的类自我介绍,您可能会执行以下操作:
<?php
class Person
{
function __construct($name)
{
$this->name = $name;
$this->introduceYourself();
}
public function introduceYourself()
{
//if $this->name then echo $this->name else echo i dont have name
echo $this->name ? "hi my name is " . $this->name : "error i dont have name";
}
}
$dave = new Person('dave');
Run Code Online (Sandbox Code Playgroud)
通常,您不会将某些内容传递给构造.
我经常遇到的其他一些包括:
__call()允许您更改调用方法的默认方式.一个很好的例子是覆盖,它允许您在使用任何以单词get开头的方法时获取属性值,或者在方法调用以单词set开始时设置属性值.
__get()用作类属性的重载,我不使用,但有人可能会感兴趣.
__set()用作类属性的重载,我不使用,但有人可能会感兴趣.
__destruct()我也不使用,只要没有对特定对象的其他引用,或在关闭序列期间以任何顺序调用.
问题
在javascript里面有这样的神奇方法吗?
有新的javascript程序员应该知道的任何隐藏的宝石,就像我上面描述的PHP吗?