使用“new”关键字创建的对象和使用“Object.create”创建的对象给出不同的结果
object created with "new" keywords and the object created with "Object.create" gives different result
谁能向我解释为什么使用"new"关键字创建的对象和使用"Object.create"关键字创建的对象会产生不同的结果?
function Car (desc) {
this.desc = 'test';
this.color = "red";
}
Car.prototype.getInfo = function() {
return 'A ' + this.color + ' ' + this.desc + '.';
}
//if i create object with "new" it's alert "A blue test"
var car = new Car();
car.color = "blue";
alert(car.getInfo()); //A blue test
// but if i create object with it's alert "A blue undefined"
var car = Object.create(Car.prototype);
car.color = "blue";
alert(car.getInfo()); //A blue undefined
这两段代码(通常)是等效的:
var car = new Car();
和:
var car = Object.create(Car.prototype);
Car.call(car); // this second line is missing from your code
在代码中,构造函数不会运行,因此不会设置这些属性。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create
Object.create 用于继承。"new"关键字是创建原型定义的对象实例。
因此,在您的示例中使用 Object.create 时,它是 Car 的原型,而不是 Car 的实例。
相关文章:
- JavaScript名称空间和对象创建
- 从不同的对象创建阵列
- Nodejs-从对象创建可读流
- Javascript对象创建实践
- 插件SDK中的动态或计算对象创建
- 为json对象创建一个动态表
- 对象.创建解释
- 从对象创建嵌套数组失败
- 从JSON对象创建具有超链接的HTML表
- 如何将文档对象创建为HTML页面
- 创建一个类,该类使用es6类语法将Function对象创建为实例
- KineticJS在对象创建(NOOB)后更改属性
- 对象创建中的JavaScript && notation
- Javascript对象创建-创建许多对象
- 从另一个JSON对象创建JSON对象
- 使用linq.js从多个对象创建JSON对象数组
- 如何使用Immutable.js从javascript原始对象创建记录映射
- 在fabric.js中初始化对象创建的子类
- Angularfire:从$FirebaseObject的子对象创建$FirebaseObject
- 为JSON对象创建CRUD