在Javascript中伪造函数重载的最佳方法是什么?
我知道不可能像在其他语言中一样重载Javascript中的函数.如果我需要一个函数有两个用途foo(x)和foo(x,y,z)这是最好的/优选的方法:
y = y || 'default'我想要一个能够采用各种类型的功能.AS3不支持直接重载...所以我不能执行以下操作:
//THIS ISN'T SUPPORTED BY AS3
function someFunction(xx:int, yy:int, someBoolean:Boolean = true){
//blah blah blah
}
function someFunction(arr:Array, someBoolean:Boolean = true){
someFunction(arr[0], arr[1], someBoolean);
}
Run Code Online (Sandbox Code Playgroud)
我如何解决它仍然有一个能够采取各种类型的参数的功能?
我怎样才能有一个函数接受或者命名参数(foo({a: 'hello', b: 'it is me'}))或位置参数(foo('hello', 'it is me'))?
我知道可以通过将对象传递给函数来模拟命名参数:
function foo(options) {
options = options || {};
var a = options.a || 'peanut'; // whatever default value
var b = options.b || 'butter'; // whatever default value
console.log(a, b);
}
// ES6 allows automatic destructuring
function foo({a = 'peanut', b = 'butter'} = {}) {
console.log(a, b);
}
Run Code Online (Sandbox Code Playgroud)
但这不允许我接受通过的位置论证.
我想使用ES6,但ES5的任何东西都可以.
我是来自Python背景的JavaScript的新手.在Python中,参数可以作为键和值传递:
def printinfo( name, age = 35 ):
print "Name: ", name
print "Age ", age
return;
Run Code Online (Sandbox Code Playgroud)
然后可以这样调用该函数:
printinfo( age=50, name="miki" )
printinfo( name="miki" )
Run Code Online (Sandbox Code Playgroud)
这些参数可以在JavaScript函数中传递吗?
我希望能够传递一个或多个参数.例如一个JavaScript函数:
function plotChart(data, xlabel, ylabel, chart_type="l"){
...
}
Run Code Online (Sandbox Code Playgroud)
我希望能够只传递数据和图表类型,标签是可选的,例如:
plotChart(data, chart_type="pie")
Run Code Online (Sandbox Code Playgroud)
这可以用JavaScript吗?
我需要一个函数,它的参数是一个对象,如果我将其保留为空,它将加载默认值。
就像是:
function loadMap(args) { //args is an object and its optional
//this is what I want to do, test args and load defauts if necesary
/*
pseudocode:
if args.latitude is not set then
give it a default value
if args.longitude is not set then
give it a default value
end pseudocode */
alert("Latitude is "+args.latitude );
alert("Longitude is "+args.longitude );
}
//outputs the default values
loadMap();
//outputs custom values
loadMap({latitude: "x.xxxx", longitude: "-x.xxxx"});
//and should work too and output …Run Code Online (Sandbox Code Playgroud) 在 ES5 中,可以为一个类创建多个构造函数,同时使用原型为两者保留公共部分,如下所示
function Book() {
//just creates an empty book.
}
function Book(title, length, author) {
this.title = title;
this.Length = length;
this.author = author;
}
Book.prototype = {
ISBN: "",
Length: -1,
genre: "",
covering: "",
author: "",
currentPage: 0,
title: "",
flipTo: function FlipToAPage(pNum) {
this.currentPage = pNum;
},
turnPageForward: function turnForward() {
this.flipTo(this.currentPage++);
},
turnPageBackward: function turnBackward() {
this.flipTo(this.currentPage--);
}
};
var books = new Array(new Book(), new Book("First Edition", 350, "Random"));
Run Code Online (Sandbox Code Playgroud)
我想使用 ES6 类和构造函数语法实现相同的结果
class …Run Code Online (Sandbox Code Playgroud) javascript ×5
ecmascript-6 ×2
overloading ×2
actionscript ×1
es6-class ×1
object ×1
optional ×1
parameters ×1