Javascript对象都是一样的
javascript objects are these all the same
与下面的代码有什么不同
1)前两个构造函数是相同的只是不同的作用域?
2)如果第三个对象被实例化为对象,那么它们是否与前两个对象相同?
谢谢你的帮助?
function StaffMember(name){
this.name = name;
this.total = 0;
this.discountPercent = function(){
//do stuff
};
}
StaffMember.prototype.calculateTax = function(){
//work out tax
};
或
var StaffMember = function(name){
this.name = name;
this.discountPercent = function(){
//do stuff
};
}
StaffMember.prototype.calculateTax = function(){
//work out tax
};
或
var StaffMember {
name:"",
discountPercent:function(){
//do stuff
},
calculateTax : function(){
//work out tax
}
}
发生了什么
function StaffMember(name){
this.name = name;
this.total = 0;
this.discountPercent = function(){
//do stuff
};
}
StaffMember.prototype.calculateTax = function(){
//work out tax
};
创建构造函数并将另一个函数添加到它的原型中。如果调用new StaffMember("bob")
,它将创建一个对象,其本地属性名称设置为bob
,本地属性total设置为0,本地函数discountPercent和静态函数calculateTax
var StaffMember = function(name){
this.name = name;
this.discountPercent = function(){
//do stuff
};
}
StaffMember.prototype.calculateTax = function(){
//work out tax
};
这与上面的相同,只是没有total属性。注意,到目前为止,您还没有创建我认为您正在尝试创建的StaffMember对象的实例。您刚刚定义了一个函数,并将另一个函数放在它的原型上
var StaffMember {
name:"",
discountPercent:function(){
//do stuff
},
calculateTax : function(){
//work out tax
}
}
这是无效的语法,您需要在StaffMember之后添加=
,否则将创建一个具有name, discountPercent和calculateTax属性的对象。
这个对象实际上是存在的,因为您已经直接创建了它,对于其他对象,您需要调用var something = new StaffMember()
。
1和2之间没有明显的区别,除了在函数中定义这些东西的地方(第一个例子将被提升到当前函数作用域的顶部,第二个例子直到代码中的那个点才被设置)。
一旦你调用了new StaffMember()
,你所创建的对象和你在第三个例子中直接创建的对象之间就会有一些区别。
最重要的是原型对象将在对象之间共享,而不是每次创建新对象时都创建新对象。这不是特别重要,因为你只是在那里放了一个函数,所以实际性能是一样的,但它会节省一些内存,如果你在原型上放了一个像数组这样的对象,它会有不同的行为。
对于前两个函数,当您调用它们(构造函数)时,它们会创建对象。然而,它们在原型calculateTax
中都具有相同的功能。最后一个已经是一个对象,一个包含数据和函数的对象字面量。
function StaffMember(name){
this.name = name;
this.total = 0;
this.discountPercent = function(){
//do stuff
};
}
StaffMember.prototype.calculateTax = function(){
//work out tax
console.log(this.total);
};
var objStaffMember = new StaffMember("User");
objStaffMember.total = 50;
objStaffMember.calculateTax();
虽然创建的对象将共享函数calculateTax
,但当实际调用该函数时,this
在calculateTax
原型函数中的上下文将是调用该函数的对象本身。即上面例子中的objStaffMember
。
前两个函数的小区别是,因为第二个函数没有名字,它有一个赋值,它是一个没有名字的函数表达式,第一个是函数声明,有一个名字。
- 为什么可以'我们在函数体中为函数对象添加属性,就像在javascript中为对象文字添加属性一样
- 如何在javascript对象中设置属性的类型,就像mongoose模式设计一样
- JavaScript日期接收为像这次旅行一样的对象.日期:“/日期(1426530600000)/”;
- 一个对象怎么能像返回自身和另一个对象一样工作
- 如何像java脚本中给定的对象一样,将对象的属性保持在相同的顺序
- 是否有任何方法可以像处理jQuery中附加到XHR延迟对象的done方法处理程序一样处理websocket onmess
- 如何使用来自其他 json 对象的 id 和父 id 创建像树结构一样的 json
- 如何将 Base64 字符串转换为 javascript 文件对象,就像从文件输入表单一样
- 像PHP一样使用json数组“水合”Javascript对象实例
- Javascript:在对象中快速查找值(就像我们可以查找属性一样)
- 如何推送到实际对象的数组最后状态,清除它并像新对象一样单独编辑
- 如何在javascript中创建一个像小部件一样的破折号对象
- Javascript对象可以像数组一样访问吗?
- jQuery风格的函数,可以像对象一样访问
- 变量可以像对待对象一样对待吗
- 像矩阵一样访问对象的javaScript数组
- jQuery如何像对象和函数一样工作?
- Ruby——你能像javascript一样创建一个独立的对象吗?
- Javascript对象,属性和变量之间的区别是什么,它们都是一样的吗?
- Javascript对象私有属性的行为就像公共的一样