Javascript 变量a={}之间的差异;和var a=新函数obj();
两者之间有什么区别吗Javascript 变量a={}之间的差异;和var a=新函数obj();,javascript,Javascript,两者之间有什么区别吗 var a= { grade: "A", price: 10 }; 及 第一个是一次性的:它创建了一个与其他对象没有共同点的对象(当然,除了所有对象都有共同点的东西) 第二个使用构造函数。构造函数的一个有用之处是,它们有一个对象,该对象被分配给使用它们作为对象原型构造的对象。这意味着,如果引用对象上没有自己副本的属性,引擎将查看对象的原型,以查看是否有它。这是JavaScript原型继承的基础 例如,第二种形式允许您通过共享原型创建具有共享特征的多个对
var a= {
grade: "A",
price: 10
};
及
第一个是一次性的:它创建了一个与其他对象没有共同点的对象(当然,除了所有对象都有共同点的东西) 第二个使用构造函数。构造函数的一个有用之处是,它们有一个对象,该对象被分配给使用它们作为对象原型构造的对象。这意味着,如果引用对象上没有自己副本的属性,引擎将查看对象的原型,以查看是否有它。这是JavaScript原型继承的基础 例如,第二种形式允许您通过共享原型创建具有共享特征的多个对象 具体例子:
function Circle(r) { // Constructor function names are initially capitalized by convention
this.radius = r;
}
Circle.prototype.area = function() {
return this.radius * this.radius * Math.PI;
};
Circle.prototype.circumference = function() {
return this.radius * 2 * Math.PI;
};
Circle.prototype.name = "Circle";
var c1 = new Circle(10);
console.log(c1.name); // "Circle"
console.log(c1.area()); // 314.1592653589793
var c2 = new Circle(5);
console.log(c2.name); // "Circle"
console.log(c2.area()); // 78.53981633974483
在那里,c1
和c2
对象从其共享原型继承属性区域
和周长
。我们这样创建的每个对象在创建新圆时都会得到它的原型;分配给它的原型是循环的对象。当我们这样做时,原型是指向的。如您所见,原型上的属性可以引用任何内容,包括函数
您不必使用构造函数来使用原型,ECMAScript第5版问世后就不必了。您可以通过对象直接分配原型。创建:
var circlePrototype = {
area: function() {
return this.radius * this.radius * Math.PI;
},
circumference: function() {
return this.radius * 2 * Math.PI;
},
name: "Circle"
};
var c1 = Object.create(circlePrototype);
c1.radius = 10;
console.log(c1.name); // "Circle"
console.log(c1.area()); // 314.1592653589793
var c2 = Object.create(circlePrototype);
c1.radius = 5;
console.log(c2.name); // "Circle"
console.log(c2.area()); // 78.53981633974483
构造函数只需将所有部分(原型和初始化逻辑)放在一个整洁的地方。构造函数的缺点是,它们倾向于将您推向一种“类式”的方式来看待原型继承。虽然类继承很有用也很流行,但它并不是镇上唯一的游戏。想要在另一个对象前面创建一个外观的对象是很常见的,这有点特别:object.create
非常适合这种情况。是的,上面的一个是错误的。这就是区别。如果用方括号更正大括号,第一个指向一个列表。第二个指向一个函数。粉笔和奶酪。@duffymo——粉笔和奶酪……以前从未听说过。我想你的意思是等级:“A”,价格:19
var circlePrototype = {
area: function() {
return this.radius * this.radius * Math.PI;
},
circumference: function() {
return this.radius * 2 * Math.PI;
},
name: "Circle"
};
var c1 = Object.create(circlePrototype);
c1.radius = 10;
console.log(c1.name); // "Circle"
console.log(c1.area()); // 314.1592653589793
var c2 = Object.create(circlePrototype);
c1.radius = 5;
console.log(c2.name); // "Circle"
console.log(c2.area()); // 78.53981633974483