在javascript中创建对象的两种方法
two ways of creating object in javascript
我创建了一个javascript对象,如下:
function field(name,label){
this.name = name
this.label= label;
}
var a = new field("market","Mkt").
然后将a赋值给另一个对象。
object.newField = a;
第二种方法是直接创建一个新属性
object.2ndNewField = {
name: "market2",
label:"Mkt2"
}
我尝试读取其他函数中的对象。它们的行为不同,但是,当我对对象进行字符串化时,它看起来没问题。我创建的两个属性有什么区别?
btw以下对象有什么不同吗?
object.2ndNewField = {
"name": "market2",
"label":"Mkt2
}
的区别在于,在第一种情况下,创建的对象继承自字段。prototype then Object。prototype(即其内部的[[prototype]] is字段)。prototype,它的内部[[prototype]]是Object.prototype),而在第二种情况下,它只继承了Object.prototype。
另一种看待它的方式是:
object.newField instanceof field; // true
object.newField instanceof Object; // true
object.newField2 instanceof field; // false
object.newField2 instanceof Object; // true
或者继承链是:
object.newField -> field.prototype -> Object.prototype -> null
object.newField2 -> Object.prototype -> null
其中'->'表示"继承自"
对于第一个选项…不要用"new"。如果错误地使用了"new",或者在应该使用它时省略了它,就会严重影响全局命名空间。另外,在代码中的某些地方,你必须小心使用"this",因为它可能绑定到你不认为它是的东西,甚至绑定到你的全局数据。
在你给出的第二个选项中,你可以安全地将它用于只用作数据/方法集合的对象(即不是"类"行为)。如果你想要一些东西,你可以用私有和公共变量/方法创建多个实例,并且可以继承,那么你应该使用一个返回对象的函数。
我写了一个相当大的例子在这里如何安全地创建基对象和使用继承。如果你点击链接,你就会明白为什么我没有在这篇文章中全部重新输入。
相关文章:
- 这两种方法有什么不同
- 通过两种方法创建和更新 CSS
- 声明Javascript名称空间的两种方法之间的区别
- Dojo和RequireJS:Error:defineAlreadyDefined(…)在站点上同时使用这两种方法时
- 处理jQuery提交表单的两种方法
- 定义 ES6 React 组件的两种方法
- 在承诺链中调用两种方法
- 这两种方法在javascript类中定义方法的区别
- 确定对象是否在JavaScript中具有属性的两种方法
- 加载JS库的两种方法
- 在Javascript中定义对象方法的两种方法之间有什么区别
- 使用以下两种方法定义的方法之间的差异
- 在 Javascript 中创建“私有”属性的这两种方法之间的区别
- 主干视图渲染:fetch-first vs . render-first,两种方法都有缺点
- mongoDB——存储相同数据的两种方法的优缺点
- 在javascript中填充数组,这两种方法的区别是什么?
- 在持续集成后,在生产服务器中使用Webpack处理环境变量的两种方法
- AngularJS中定义控制器的两种方法
- 嵌套脚本标签,两种方法的比较
- Javascript -最好的两种方法来创建一个简单的时钟