我们通过构造函数来创建一个对象
构造函数创建的时候和普通函数一样,只不过构造函数通常以大写字母开头
我们通过new 运算符来调用构造函数
在new 一个构造函数的时候都执行了哪些那
(1) 创建一个新对象;
(2) 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象) ;
(3) 执行构造函数中的代码(为这个新对象添加属性) ;
(4) 返回新对象。
function Point(x, y) {
//为新对象添加x,y属性以及f方法
this.x = x;
this.y = y;
this.f = function(){
return `${x}${y}`
}
}
//prototype方法可以给对象添加属性和方法(函数也是一个对象,添加toString方法)
Point.prototype.toString = function () {
return '(' + this.x + ', ' + this.y + ')';
};
var p = new Point(1, 3);
console.log('p=========',p);
var a = p.toString()
var b = p.f()
console.log('a=========',a);
console.log('b=========',b);
打印的结果为
p========= Point { x: 1, y: 3, f: [Function (anonymous)] }
a========= (1, 3)
b========= 13
使用es6的class方法也可以直接创建
class Point {
//通过constructor方法给对象创建属性
constructor(x,y){
this.x = x;
this.y = y;
}
//直接定义函数来给对象创建方法,只不过在定义方法的时候,直接使用x和y是获取不到参数的
toString(){
return `(${this.x},${this.y})`
//return `(${x},${y})` x和y取不到
}
}
Point.prototype.f = function(){
return `${this.x}${this.y}`
}
var p = new Point(1,2);
console.log('p=========',p);
var a = p.toString()
console.log('a=========',a);
var b = p.f()
console.log('b=========',b);
打印结果
p========= Point { x: 1, y: 2 }
a========= (1,2)
b========= 12