javascript差异(车内函数)this.color与car.color1与car.prototype.color2
您能解释一下为什么在创建新对象之前和之后,其中3个有不同的答案。javascript差异(车内函数)this.color与car.color1与car.prototype.color2,javascript,Javascript,您能解释一下为什么在创建新对象之前和之后,其中3个有不同的答案。car是一个函数: var car = function(){ this.color = 'blue'; } car.color1 = 'white'; car.prototype.color2 = 'red'; var toyota = new car(); console.log(car.color); // undefined console.log(car.color1); // whit
car
是一个函数:
var car = function(){
this.color = 'blue';
}
car.color1 = 'white';
car.prototype.color2 = 'red';
var toyota = new car();
console.log(car.color); // undefined
console.log(car.color1); // white
console.log(car.color2); // undefined
console.log(toyota.color); // blue
console.log(toyota.color1); // undefined
console.log(toyota.color2); // red
由于函数是一级对象,因此可以对其设置属性:
var car = function(){
this.color = 'blue';
};
这在某种程度上相当于面向对象语言中的静态属性
函数也可以作为构造函数(当您使用new
操作符调用它们时)。当它们这样做时,它们生成的实例继承自构造函数原型。属性解析查看实例,然后继续向下查看原型链,直到找到属性:
car.color1 = 'white';
当您实例化car
时,将调用构造函数并将实例的color
属性设置为'blue'
例如:
- 访问
属性时,会在实例上找到该属性李>color
- 当您访问实例上的
属性时,它不存在(它是构造函数的静态属性)李>color1
- 当您访问
属性时,在实例上找不到它,但在原型上找到了它color2
- 当您访问
属性时,它不存在(因为它只存在于实例上)color
- 当您访问
属性时,会发现它,因为您正在检查函数对象本身color1
- 访问
属性时,它不存在(因为它只存在于实例继承的原型上)color2
car.prototype.color2 = 'red'; // Property shared by instances of `car`
var toyota = new car(); // toyota is an instance of `car`