Jea*_*tin 13 javascript oop methods prototype
这是代码吗
function Person() {
function myMethod() {
alert ('hello');
}
this.method = myMethod;
}
Run Code Online (Sandbox Code Playgroud)
相当于:
function Person() { }
Person.prototype.method2 = function() {
alert ('hello');
};
Run Code Online (Sandbox Code Playgroud)
如果是,我应该使用哪种方法定义?为什么?
Mat*_*eer 13
它们在您的简单示例中功能相同,但在幕后工作方式却截然不同.prototype函数的属性实际上是"原型模板".它说"无论何时制作一个对象,我都被用作对象的构造函数,给它们这个对象作为它们的原型".
因此Person,在第二个示例中创建的所有内容都共享该method2方法的相同副本.
在第一个示例中,每次解释器遇到function关键字时,它都会创建一个新的函数对象.所以在第一个例子中,每个实例Person都有自己的myMethod方法副本.绝大多数时候这无关紧要.但是这第一种方法使用更多的内存,有时这很重要.
在更有趣的情况下,它们在功能上并不相同.在第一个例子中,myMethod可以访问定义的局部变量Person,但第二个例子不能,作为一个区别.