声明 JavaScript 成员函数的最佳实践
Best practice for declaring JavaScript member function
下面我有两个成员函数,sayHello 和 sayHi,它们有效地做同样的事情:
function Person (n) {
this.name = n;
this.sayHello = function() {console.log("Hello, my name is "+this.name);};
};
Person.prototype.sayHi = function() {console.log("Hi, I'm "+this.name);};
Jeff = new Person('Jeff');
Joe = new Person('Joe');
Jeff.sayHello() // returns "Hello, my name is Jeff"
Joe.sayHi() /// returns "Hi, I'm Joe"
我认为在实现方面,它们是相同的,但现在我开始认为将函数分配给原型只会创建函数的一个图像,而 'sayHello' 在函数中声明,因此新图像将每次创建新的 Person 对象时都创建?那是对的吗?来自 C++ 世界,我更喜欢将声明放在函数中,但如果它会导致膨胀,我不想这样做。
你是对的,在 Person 构造函数中声明函数 sayHello
将在每次调用该函数时创建一个新函数,因此这是在浪费资源。然而,这并没有浪费任何大量的资源,如果它成为一个问题,那么除了一个函数被重新声明之外,还会有其他几个更重要的问题。
至于最佳实践,主要是风格。一般来说,您只想使用原型进行扩展。
下面我有两个成员函数,sayHello 和 sayHi,它们有效地做同样的事情:
function Person (n) {
this.name = n;
this.sayHello = function() {console.log("Hello, my name is "+this.name);};
};
Person.prototype.sayHi = function() {console.log("Hi, I'm "+this.name);};
Jeff = new Person('Jeff');
Joe = new Person('Joe');
Jeff.sayHello() // returns "Hello, my name is Jeff"
Joe.sayHi() /// returns "Hi, I'm Joe"
你是对的,在 Person 构造函数中声明函数 sayHello
将在每次调用该函数时创建一个新函数,因此这是在浪费资源。然而,这并没有浪费任何大量的资源,如果它成为一个问题,那么除了一个函数被重新声明之外,还会有其他几个更重要的问题。
至于最佳实践,主要是风格。一般来说,您只想使用原型进行扩展。