Tân*_*Tân 8 javascript ecmascript-6
我正在编写一个小例子来调用函数getAge()来通过对象显示年龄.
我有3种方法可以做到这一点:
"use strict";
var personClass = class {
static getAge() {
return 18
}
};
var personJSON = {
getAge: function () {
return 18
}
};
function personFunc() {
var getAge = function () {
return 18
};
// set a flag to point to getAge function
this.getAge = getAge()
}
$('#btn1').click(function () {
alert(personClass.getAge())
});
$('#btn2').click(function () {
alert(personJSON.getAge())
});
$('#btn3').click(function () {
var p = new personFunc();
alert(p.getAge)
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btn1">Get age via class</button>
<button id="btn2">Get age via json</button>
<button id="btn3">Get age via function</button>Run Code Online (Sandbox Code Playgroud)
我的问题:最好的方法是什么?为什么?
这取决于您必须解决的实际问题以及您正在使用的编程风格.如果你倾向于使用面向对象的方法,并希望从它的继承等功能中获益,你可能想要将一个人建模为
function Person(){
var age = 18;
this.getAge = function() {
return age;
}
}
var person = new Person();
alert(p.getAge());
Run Code Online (Sandbox Code Playgroud)
或者作为一个班级
class Person {
constructor() {
this.age = 18;
}
getAge() {
return this.age()
}
}
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢更实用的样式,那么您将编写纯粹的独立函数,对某些数据执行某些操作:
// does not make much sense in this age of a person context
function age(obj, dateFn) {
return dateFn() - obj.born;
}
var person = { born : new Date(/* */) }
var animal = { born : new Date(/* */) }
alert(age(person, Date.now));
alert(age(animal, Date.UTC));
Run Code Online (Sandbox Code Playgroud)
举个例子getAge,任何一种静态函数都没有任何意义(你的第一个例子),因为它age是某个对象的属性.因此,您需要一个可用于调用方法或传递给函数的对象实例.
我会推荐最简单的形式:
var personJSON = {
getAge: function () {
return 18;
}
};
Run Code Online (Sandbox Code Playgroud)
它已经创建了一个具有所需属性的明确定义的对象,它可以很好地扩展,并且不受繁文缛节的样板代码的阻碍。
好的代码多年来一直这样做,并且这是一种经过充分验证的风格。它可读且紧凑。
您不会从中获得 ES6 类定义的新高级功能,而在更高级的情况下可能需要这些功能。
警告!这只是我个人的、有偏见的观点:
就我而言,我根本不会使用类定义,相反,我将利用这种风格和 lambda,就像我在 10 多年以来一直所做的那样。我也反对在 Javascript 中引入语法糖只是为了让它看起来像其他语言。我更喜欢原型范式。
| 归档时间: |
|
| 查看次数: |
1127 次 |
| 最近记录: |