gpt4 book ai didi

javascript - 我到目前为止还没有见过这种 JavaScript 语法,它到底有什么作用?

转载 作者:行者123 更新时间:2023-12-02 23:26:57 24 4
gpt4 key购买 nike

今天我看到了一个我不熟悉的 JavaScript 语法(调用函数时)。就像:

def('Person') ({
init: function(name) {this.name=name;}
,speak: function(text) {alert(text || 'Hi, my name is ' + this.name);}
});

,和

def('Ninja') << Person ({
kick: function() {this.speak('I kick u!');}
});

1:第一个示例中括号内的对象会发生什么情况?它由 def 处理。函数以某种方式运行,但我不明白这里发生了什么(请参阅下面的 def 函数)。物体去哪里了?

2:又是同样的事情,但是使用了 <<我从未见过的运算符(我想!)。这是怎么回事?

代码来自 http://gist.github.com/474994 ,其中 Joe Dalton 做了一个小的 JavaScript-OO 继承的东西(它显然是其他人工作的一个分支,但看起来相当彻底地重写了)。也许您想在那里查看 def 引用的内容函数,我在这里给你:

function def(klassName, context) {
context || (context = global);

// Create class on given context (defaults to global object)
var Klass =
context[klassName] = function Klass() {

// Called as a constructor
if (this != context) {

// Allow the init method to return a different class/object
return this.init && this.init.apply(this, arguments);
}

// Called as a method
// defer setup of superclass and plugins
deferred._super = Klass;
deferred._plugins = arguments[0] || { };
};

// Add static helper method
Klass.addPlugins = addPlugins;

// Called as function when not
// inheriting from a superclass
deferred = function(plugins) {
return Klass.addPlugins(plugins);
};

// valueOf is called to set up
// inheritance from a superclass
deferred.valueOf = function() {
var Superclass = deferred._super;
if (!Superclass)
return Klass;
Subclass.prototype = Superclass.prototype;
Klass.prototype = new Subclass;
Klass.superclass = Superclass;
Klass.prototype.constructor = Klass;
return Klass.addPlugins(deferred._plugins);
};
return deferred;
}

最佳答案

1:来电def('Person')返回一个函数,该函数以对象作为参数进行调用。其原理与以下内容相同:

function x() {
return function(y) { alert(y); }
}

x()('Hello world!');

2:<<运算符是左移运算符。它将整数值向左移动特定位数。我没有找到任何其他用途的引用,并且 JavaScript 中没有运算符重载,因此我无法在函数上使用它。到目前为止,我觉得它像是一个错字。

编辑:

正如 Tim 所解释的,移位运算符仅用于引发对 valueOf 的调用。方法。它的工作原理就像是所有运算符的重载,接管了最初的目的并做一些完全不同的事情。

关于javascript - 我到目前为止还没有见过这种 JavaScript 语法,它到底有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3245639/

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