js 在es6以前没有类的概念,使用构造函数和原型来模拟类
es6 中类的使用,可参考Javascript 类-CSDN博客
1.js创建对象有三种方式:
//1.对象字面量
var obj = new Object();
//2.new Object()
var obj1 = {};
//3.自定义构造函数 /*使用构造函数可创建多个对象*/
function Func(name,age)
{
this.name = name;
this.age = age;
this.fn = function(){
console.log(this.name);
}
}
var jack = new Func('jack');
jack.fn();
2.实例成员和静态成员
构造函数中的属性和方法称为成员
1.实例成员就是构造函数内部通过this添加的成员
实例成员只能通过实例化的对象来访问
2.静态成员 在构造函数本身上添加的成员
静态成员只能通过构造函数来访问
function Func(name,age)
{
this.name = name; //实例成员
this.age = age; //实例成员
this.fn = function(){
console.log(this.name);
}
}
var jack = new Func('jack',20);
console.log(Func.name) //error /*不能用构造函数访问实例成员*/
Func.sex = 'male';
console.log(Func.sex); //male
console.log(jack.sex); //undefine /*不能通过对象访问*/
3.构造函数原型对象 prototype
构造函数存在浪费内存的问题,不同对象会创建多个相同方法
把方法直接定义在 prototype对象上,所有对象的实例就可以共享这些方法
function Func(name,age)
{
this.name = name;
this.age = age;
}
Func.prototype.fn = function(){
console.log(this.name);
}
var jack = new Func('jack',20);
var leo = new Func('leo',20);
console.log(Func.prototype)
4.对象原型 __proto__
5.原型 constructor 构造函数
如果修改了原来的原型对象,给原型对象赋值的是一个对象,则必须手动利用 constructor 指回原来的构造函数
function Func(name,age)
{
this.name = name;
this.age = age;
}
Func.prototype = {
constructor:Func, //手动把 constructor 指回Func
fn:function()
{
console.log(this.name);
},
fn1:function()
{
console.log(this.age);
}
}
var jack = new Func('jack',20);
var leo = new Func('leo',20);
console.log(Func.prototype.constructor)
console.log(jack.__proto__.constructor)