如何通过构函数的方式创建一个拥有属性和方法的对象?
使用new运算符创建一个构造函数,构造函数F会返回类型为function的name的对象,function可以接受参数,可以根据参数来创建相同属性不同值得的对象,function实例在其作用域中有一个constructor属性,指向的是function本身;
当我们使用new来构造函数对象时,大致分为三步:
1、创建类的实例,这一步是把一个空的对象的proto属性设置为函数.prototype;
2、初始化实例,函数传入参数并被调用,关键字this被设定为该实例;
3、返回实例;
prototype 是什么?有什么特性?
每一个函数在创建之后都会拥有一个名为prototype的属性,这个属性指向函数的原型对象。
在var x = new Foo()的时候,Foo.prototype,是一个对象,x.proto也引用了这个对象。
当Foo.prototype = null,只是把Foo.prototype这个对象设为了null,而x.proto不改变。x.方法会沿着原型链_proto向上找,直到找到属性方法。直接Foo.prototype.方法= null,修改了对象属性方法的值,x.proto.方法的值也随之改变。
Prototype 是全局属性,适用于所有的Javascript对象
创建一个 Car 对象,拥有属性name、color、status;拥有方法run,stop,getStatus?
function Car(name,color,status){
this.name = name;
this.color = color;
this.status = status;
this.Run = function(){
console.log(this.name+this.color+this.status+'正在行驶');
};
this.Stop = function(){
console.log(this.name+this.color+this.status+'已停车');
};
this.getStatus = function(){
console.log(this.name+this.color+this.status+'状态很好')
}
}
var car = new Car ('BMW','black','round');
car.Run();
car.Stop();
car.getStatus();
画出如下代码的原型图
function People (name){
this.name = name;
this.sayName = function(){
console.log('my name is:' + this.name);
}
}
People.prototype.walk = function(){
console.log(this.name + ' is walking');
};
var p1 = new People('哈哈');
var p2 = new People('22');
p1.walk();
p2.sayName();