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