在 JavaScript 中,Object.create() 方法用于创建一个新 对象,使用现有的对象来提供新创建的对象的 __proto__
。
Object.create(proto[, propertiesObject]);
参数 | 描述 |
---|---|
proto | 新创建对象的原型对象。 |
propertiesObject | 可选。如果没有指定为 undefined,则是要添加到新创建对象的不可枚举(默认)属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应 Object.defineProperties() 的第二个参数。 |
属性 | 说明 |
---|---|
configurable | 表示新创建的对象是否是可配置的,即对象的属性是否可以被删除或修改,默认false |
enumerable | 对象属性是否可枚举的,即是否可以枚举,默认false |
writable | 对象是否可写,是否或以为对象添加新属性,默认false |
get | 对象getter函数,默认undefined |
set | 对象setter函数,默认undefined |
一个新对象,带着指定的原型对象和属性。
如果 propertiesObject 参数是 null 或非原始包装对象,则抛出一个 TypeError 异常。
使用 Object.create 创建对象
<!DOCTYPE html>
<html>
<head>
<title>JavaScript Object.create()</title>
<script type="text/javascript">
console.log("嗨客网(www.haicoder.net)");
// Person - 父类(superclass)
function Person() {
this.name = "";
this.age = 1;
}
// 父类的方法
Person.prototype.info = function(name, age) {
this.name = name;
this.age = age;
console.info('Person info, name =', this.name, "age =", this.age);
};
// Student - 子类(subclass)
function Student() {
Person.call(this); // call super constructor.
}
// 子类续承父类
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
var student = new Student();
console.log('Is student an instance of Student?', student instanceof Student);
console.log('Is student an instance of Person?', student instanceof Person); // true
student.info("HaiCoder", 109); // Outputs, 'Shape moved.'
</script>
</head>
</html>
程序运行后,控制台输出如下:
我们首先创建了一个 Person 类,该类有两个 属性,即 name 和 age,同时,我们给 Person 类定义了一个 info 方法,该方法用于设置 Person 类的 name 和 age 属性的值,同时,打印 name 和 age 属性的值。
同时,我们定义了一个 Student 类,我们使用了 Object.create 使 Student 类继承自 Person 类,最后,我们创建了一个 Student 类的实例,我们发现,实例 student 是类 Person 和 Student 的实例。
在 JavaScript 中,Object.create() 方法用于创建一个新对象,使用现有的对象来提供新创建的对象的 __proto__
。