Javascript 面向对象与虚线表示法
我知道下面的示例用于实例化一个对象,但我正试图找出何时使用它:Javascript 面向对象与虚线表示法,javascript,Javascript,我知道下面的示例用于实例化一个对象,但我正试图找出何时使用它: function Person(){ this.age = 0 } var p = new Person() 我是老派,但我编写JavaScript的方式如下: var person = {} person.age = 0 person.myMethod = function() { } 我想我永远不需要两个person对象的实例。我认为我所做的是将老派思想应用到JavaScript的虚线符号中,我从来没有在任何编程中真正
function Person(){
this.age = 0
}
var p = new Person()
我是老派,但我编写JavaScript的方式如下:
var person = {}
person.age = 0
person.myMethod = function() {
}
我想我永远不需要两个person对象的实例。我认为我所做的是将老派思想应用到JavaScript的虚线符号中,我从来没有在任何编程中真正使用对象
如果你提出一个使用对象的例子,而我的任务是解决同一个用例,那么我会按程序解决它吗?或者有面向对象显然是更好的解决方案的用例吗?如果您不需要两个person对象实例,那么就不需要ES6类、函数和新的、或
函数。prototype
当您需要:
- 具有给定类型的多个对象
- 确定给定对象是否为给定类型
- 使用继承
- 扩展已存在的类型,并查看已存在对象中反映的那些扩展
const person = {
age: 10,
myMethod() {}
}
而不是点符号
请注意,使用词汇上下文this
只是传递一个隐式参数,这也可以在闭包或显式中完成
使用闭包意味着为实体的每个实例创建一个新函数,这显然有成本,显式传递(通常有第一个参数)意味着不能使用点表示法,使用原型将只创建函数的一个实例,但在通过原型链解析函数时会有成本
// closure
const name = "john";
const person = {
name,
meet ( other ) { console.log(name + " says hello to " + other.name); }
};
// passing explicitly
function meet ( p1, p2 ) {
console.log(p1.name + " says hello to " + p2.name);
}
// using the prototype with the class syntax
class Person {
constructor (name) { this.name = name; }
meet (other) { console.log(this.name + " says hello to " + other.name); }
}
为什么不使用新的ES6类语法?点/括号表示法、nor对象实例都是新的javascript机制。如果您不需要某个对象的多个实例,那么第二个就可以了。但有时您可能希望多个对象具有相同的方法和类似的属性。就像拥有40个人的对象一样,您是愿意显式地编写每个对象,还是只定义一个构造函数/方法/等等,然后在每次需要时创建一个新实例。这个问题的答案大多基于观点。这完全取决于手头的情况。我同意这是基于观点的,但它是如何编写JavaScript的基础。