- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这里是 JS 新手,所以希望这不是一个愚蠢的问题。
在使用方法定义自定义对象时,以下两种方法的区别和优缺点是什么?
1 : 使用this
在类定义中定义方法。
function MyObj(){
this.doStuff = function(){
//method body
}
}
2 : 使用prototype
单独定义方法。
function MyObj(){
}
MyObj.prototype.doStuff = function()
{
//method body
}
我现在正在弄乱它,两者似乎都一样,所以我想我会在我走上一条稍后会回来并咬我屁股的轨道之前找到不同之处:)
大家好
最佳答案
当您使用 this
时,您的“类”的每个实例都将拥有自己的方法副本。
当您使用原型(prototype)
时,所有实例都将共享该方法的一个副本。因此,在 prototype
上声明方法会更有效,因为每个实例需要的内存更少。
例如,创建MyObj
的两个实例:
var o1 = new MyObj(),
o2 = new MyObj();
如果在构造函数中声明了 doStuff
方法,那么每个实例现在在内存中都有该方法的副本。如果它是在 prototype
上声明的,它们将共享该副本。当您尝试调用它时:
o1.doStuff();
实例本身没有doStuff
属性,所以我们向上移动原型(prototype)链,到MyObj.prototype
,那里有一个doStuff
方法。
关于javascript - MyObj.prototype。对比这个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10934588/
一直在阅读 Addy Osmani 的Javascript 设计模式,在文档中这个简单的赋值用于“防止覆盖已经存在的对象/命名空间”: var myNS = myNS || function() {}
如果 myObj 是一个 javascript 对象,将 this.myObj = myObj 创建该对象目前的样子的副本/快照,还是会存储对实际对象的引用? 我在处理似乎是同一对象的两套对象时遇到了
标题, 假设我们有 std::vector ArrayOfPtr; std::vector ArrayOfPtrToConstObj; int main() { //I'd like to
如果我理解正确的话,JavaScript 中的每个对象都继承自 Object 原型(prototype),这意味着 JavaScript 中的每个对象都可以通过其原型(prototype)链访问 ha
在 C# 中我有: public class MyObj { // methods and properties etc. } List listOfObjects = new List(); li
这里是 JS 新手,所以希望这不是一个愚蠢的问题。 在使用方法定义自定义对象时,以下两种方法的区别和优缺点是什么? 1 : 使用this 在类定义中定义方法。 function MyObj(){
在我的 JSP 页面中,我导入了一个对象: 然后在表单输入中,我有: 哪里label.getDescription()返回一个字符串。但是,我的表格中没有打印任何内容。如果我用 改变它然后就可以
我有以下模型 public class Model { public string Name {get;set;} public DateTime HireDate {get;set;}
我有一个包含大量属性的类。如果程序员在该类型的对象上调用 ToString() 是错误的。以这个示例代码为例: using System; public class Foo { public
我目前正在尝试了解 Java 在我要求时如何分配空间。 具体来说(据我所知,我无法使用泛型声明数组)我做了这个分配: List> elevlists; elevlists = new ArrayLis
更新:如果您尝试做与我相同的事情,您可能会犯与我相同的错误,请参阅下面我自己的答案... 这是原来的问题: 我正在学习 React,我发现提供的将对象迭代映射到 jsx 标签的解决方案可能更直观。而不
如果我声明一个像这样的对象 var obj =function(element){ return{ wide:element.clientWidth }} 我必须这样声明 var fdiv=new o
我无法拆分列表中的 Java 对象。如何将 Body 标记化/转换为单个 Java 对象?
我在尝试执行以下代码片段时遇到以下错误。请让我知道出现此错误的可能原因是什么。 List list = .... ; for(Object obj:list) { Object[] myObj = (
我的 REST 客户端使用 RestTemplate 来获取对象列表。 ResponseEntitiy res = restTemplate.postForEntity(getUrl(), myDTO
我想反序列化 json 集合 {{a:"1", b:"2"},{a:"6", b:"5"},{a:"4", b:"3"}} 到这个对象: {公共(public)字符串 a,公共(public)字符串
假设我想在存储在变量中的特定表中导航。 我想在表的 thead 中找到 tr 中的所有输入。 如果我有表的 ID,我会这样做 - $('#mytable thead tr input') 但是假设我已
出于测试目的,我需要从 QProcess 捕获发出的信号。 因为我使用的是控制台应用程序,所以我决定在我的 main.cpp 文件中创建一个名为 myObj 的类,主要使用 this example
我刚刚下载了 Facebook iOS SDK我注意到在 SDK 附带的示例代码中,每当它创建 Facebook 类的实例时,它都会这样做: _facebook = [[[[Facebook allo
这个问题在这里已经有了答案: Error: "Cannot use 'async' on methods without bodies". How to force async child over
我是一名优秀的程序员,十分优秀!