<分区>
假设我有以下功能
function FooController (){
this.foo = function () {
alert('foo');
}
}
FooController.prototype.bar = function () {
alert('bar');
}
这两种语法有区别吗?为什么我要用一个而不是另一个?性能受到影响吗?
<分区>
假设我有以下功能
function FooController (){
this.foo = function () {
alert('foo');
}
}
FooController.prototype.bar = function () {
alert('bar');
}
这两种语法有区别吗?为什么我要用一个而不是另一个?性能受到影响吗?
最佳答案
如果它是在原型(prototype)上定义的,FooController 的任何实例都将“继承”bar
方法,因为它在实例的原型(prototype)链中。使用此技术仅定义了 1 个函数并在内存中。
如果您使用 this.foo = function
进行定义,则您会将函数作为该实例的属性直接添加到实例中。这意味着您将在每个 Controller 实例的内存中拥有 1 个函数。
function FooController {}
FooController.prototype.hello = function() {
console.log("world");
};
创建实例并检查原型(prototype)的值
var c = new FooController();
c.hello(); // "world"
这符合预期,但让我们直接在 c
实例上定义一个 hello
方法
c.hello = function() { console.log("cats"); };
c.hello(); // "cats"
我们仍然可以直接调用原型(prototype)方法
c.prototype.hello.call(c); // "world"
或者我们可以删除
c
实例上的hello
属性
delete c.hello;
现在让我们再次调用我们的函数
c.hello; // "world"
回到使用原型(prototype)的方法!
关于javascript - 原型(prototype)与函数定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26288353/
相关文章:
javascript - 为什么在 JavaScript 对象中使用公共(public)方法?
mysql - Gradle 任务原型(prototype)设计
javascript - 如何在 P5js/JavaScript 中按名称循环函数
javascript - js创建高级原型(prototype)
javascript - DOM 操作 JavaScript - 为数组的每个元素创建一个函数
javascript - 如何使用 JQuery 在 Gridview 中获取文本框的 ID?