Jac*_*ues 2 javascript object-literal
使用这样的文字符号声明一个对象:
var person = {
name: "",
gender: "",
age: 0
}
Run Code Online (Sandbox Code Playgroud)
与像这样的构造函数函数:
var person = function(name, gender, age)
{
this.name = name;
this.gender = gender;
this.age = age;
}
Run Code Online (Sandbox Code Playgroud)
第一个问题:
当这样声明时,即使它们还没有“实例化”,它们是否都占用了相等的内存量?(或者这个概念不适用于 JavaScript)
第二个问题:
这两个都可以正确更新如下:
var john = new person();
Run Code Online (Sandbox Code Playgroud)
为避免混淆,让我们使用不同的名称:
// An object we might use as a prototype
var person = {
name: "",
gender: "",
age: 0
};
// A constructor function, note the capital P
var Person = function(name, gender, age)
{
this.name = name;
this.gender = gender;
this.age = age;
};
Run Code Online (Sandbox Code Playgroud)
当这样声明时,即使它们还没有“实例化”,它们是否都占用了相等的内存量?(或者这个概念不适用于 JavaScript)
编号person(小写)是一个具有三个属性的简单对象。Person(大写)是一个函数对象,它有一个关联的(空白)原型对象 ( Person.prototype)。所以理论上,函数会比对象占用更多的内存,因为我们有函数对象,它的关联代码,还有简单的对象(它的原型)。
这不是容易事,但。函数对象本身不占用大量内存,代码很小,而空白对象(原型)占用的内存非常非常少。大概你不会有数以百万计的这些,因为(如果我正确理解你的问题)它们应该是其他对象的基础。
这两个都可以正确更新如下:
Run Code Online (Sandbox Code Playgroud)var john = new person();
不是字面意思,不是。但是您可以基于它们中的每一个创建实例。要创建由 支持的新实例person,您可以使用Object.create; 要通过Person并由 支持创建新实例Person.prototype,您可以使用new:
// Using the `person`
var john = Object.create(person);
john.name = "John";
john.gender = "M";
john.age = 47;
// Using `Person` (the constructor function)
var mary = new Person("Mary", "F", 32);
Run Code Online (Sandbox Code Playgroud)
只有当至少一个原型属性不是由构造设置时,这才真正变得有趣。该属性可能是任何东西,但让我们以常见的情况为例:一个函数:
// An object we might use as a prototype
var person = {
name: "",
gender: "",
age: 0,
sayName: function() {
console.log("My name is " + this.name);
}
};
// A constructor function, note the capital P
var Person = function(name, gender, age)
{
this.name = name;
this.gender = gender;
this.age = age;
};
Person.prototype.sayName = function() {
console.log("My name is " + this.name);
};
Run Code Online (Sandbox Code Playgroud)
然后:
// Using the `person`
var john = Object.create(person);
john.name = "John";
john.gender = "M";
john.age = 47;
john.sayName(); // "My name is John"
// Using `Person` (the constructor function)
var mary = new Person("Mary", "F", 32);
mary.sayName(); // "My name is Mary"
Run Code Online (Sandbox Code Playgroud)
johnsayName从person,其原型获取;mary获得sayName从Person.prototype,它的原型。
| 归档时间: |
|
| 查看次数: |
1059 次 |
| 最近记录: |