相关疑难解决方法(0)

Javascript:功能链接

解决方案:不.你不能这样做.使用&&进行链命令并完成它.

tl; dr:in random.function("blah").check(),check()如果function("blah")返回false ,如何忽略它?或者这甚至可能吗?

的背景:

好的,所以我对代码很可怕.但是我试图通过编码使我的生活变得轻松的事情来拖延.而我的勉强,我的意思是显微镜.所以基本上,我的整个项目都是基于对象和插件.(插件是包含对象的附加.js文件.例如,afk.js看起来像这样:

global.afk = function(){};
afk.check = function(){ ... };
Run Code Online (Sandbox Code Playgroud)

通过加载该js文件,我可以访问afk对象及其中的所有功能.可能效率不高,但它有效,它可以确定哪些功能更容易做到.

回到拖延位.因为我不知道加载了什么插件,在一些共享核心.js文件中,有这些条件语句:if (plugin.has("afk")) { afk.check(); };但是,我感到无聊并plugin.has()返回实际对象而不是'true',所以我可以这样做:

plugin.has("afk").check();
Run Code Online (Sandbox Code Playgroud)

它按预期工作.除非没有afk插件,否则会抛出"false has no method check"的明显错误.

就是这样.有任何想法吗?此外,如果您有任何疑虑,请告诉我.我知道我做了很多错误/效率低下的事情,而且当我弄清楚它时修复它们很好.

javascript function object node.js

7
推荐指数
1
解决办法
1131
查看次数

Javascript(ECMA-6)类魔术方法__call就像PHP一样

这是我的用例

getSomeFields(persons, fields){

    let personsWithSpecificFields = [];

    _.each(persons, (person) => {

        let personSpecificFields = {};

        _.each(fields, (field) => {
            // here im thinking to modify the field to match the method name 
            // ( if something like __call as in php is available)
            // e.g. field is first_name and i want to change it to getFirstName
            personSpecificFields[field] = person[field]();

        });

        personsWithSpecificFields.push(personSpecificFields);
    });

    return personsWithSpecificFields;
}
Run Code Online (Sandbox Code Playgroud)

这是我的 person class

import _ from 'lodash';

export default class Person{

    // not working..
    __noSuchMethod__(funcName, …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

7
推荐指数
1
解决办法
5339
查看次数

Javascript魔术方法

在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吗?

javascript php

6
推荐指数
1
解决办法
3607
查看次数

如何"未定义不是函数"错误会变得更有用?

考虑这个JavaScript代码:

var x = new date()

// "ReferenceError: date is not defined" - useful error, hints at a typo ('D'ate)

var x = new MyClass.foo()

// "TypeError: undefined is not a function" - bad error, no hint it might be 'F'oo
Run Code Online (Sandbox Code Playgroud)

错误本身是正确的,因为MyClass没有foo方法,所以MyClass.foo确实返回undefined,并且new不喜欢它.问题是这并没有暗示用户可能拼错了方法名称.现实生活中的例子:

new Meteor.collection('foo')  // instead of:
new Meteor.Collection('foo')  // c and C look alike with many fonts at small size
Run Code Online (Sandbox Code Playgroud)

是否有一个便携式检测到的对象没有方法的方法之前 newundefined传递给它,自动?__noSuchMethod__ …

javascript methods prototype v8 object

6
推荐指数
1
解决办法
468
查看次数

在 Node.js 中模仿 PHP 的 __get()、__set() 和 __call() 魔术方法

我想知道是否有一种方法可以模仿 Node.js 中 PHP 的神奇方法 __get() 和 __set()。从这个问题:JavaScript getter for allproperty我知道你可以在Rhino中做到这一点,但Node是建立在V8之上的。V8有办法做到这一点吗?

javascript php v8 magic-methods node.js

5
推荐指数
1
解决办法
7613
查看次数