标签:crt 其他 模块 自己 第一个 空间 代码 没有 原型对象
1、什么是面向对象
// 先通过一个函数的方法,来创建对象 function createObj(){ // 创建对象 const obj = {}; // 给对象添加属性和属性值 obj.name = ‘张三‘; obj.age = 18; obj.addr = ‘北京‘; obj.sex = ‘男‘; // 给对象添加方法 obj.funNameAge = function(){ console.log(this.name , this.age); } obj.funNameAddr = function(){ console.log(this.name , this.addr); } obj.funSexAge = function(){ console.log(this.sex , this.age); } obj.funAll = function(){ console.log(this.name, this.sex , this.age, this.addr); } // 返回这个创建好的对象 return obj; } // 调用函数,函数创建对象,并且作为返回值 // 变量中存储的就是函数创建的对象 const obj = createObj(); // 可以通过调用obj中存储的对方的方法,来实现功能 obj.funAll();
3、工厂模式
function createDumpling(pi,mian,xian,tioliao){ // 创建包饺子对象 const dumpling = {}; // 给包饺子对象,添加属性 dumpling.pi = pi; dumpling.xian = xian; dumpling.mian = mian; dumpling.tiaoliao = tiaoliao; // 给包饺子对象,添加方法 // 和面 dumpling.huomian = function(){ console.log(this.mian); } // 和饺子馅 dumpling.huoxian = function(){ console.log(this.xian); } // 包饺子 dumpling.bao = function(){ console.log(this.xian,this.pi,this,mian); } // 煮饺子 dumpling.zhu = function(){ console.log(‘煮饺子了,等着吃吧‘); } // 返回包饺子对象 return dumpling; } // 要开始包饺子 // 创建一个执行包饺子功能的对象,并且输入参数 const baojiaozi1 = createDumpling(‘薄皮‘ , ‘白面粉‘ , ‘猪肉大葱‘); const baojiaozi2 = createDumpling(‘厚皮‘ , ‘玉米面‘ , ‘鱼香肉丝‘); console.log(baojiaozi1); // 可以调用任意的封装的方法 baojiaozi1.huoxian(); // 调用和饺子馅方法 baojiaozi1.huomian(); // 调用和面方法
根据工厂模式可以推断:
面向对象编程的优点
function CrtObj(name,age,sex,addr){ // 在构造函数中,使用this,来指代对象 // 这个对象,就是我们使用构造函数,生成的实例化对象 // 定义属性 // 给实例化对象,添加name属性,属性值是输入的name参数 this.name = name; this.age = age; this.sex = sex; this.addr = addr; // 定义方法 this.funAll = function(){ console.log(this.name,this.age,this.sex,this.addr ) } this.funNameAge = function(){ console.log(this.name,this.age) } this.funSexAddr = function(){ console.log(this.sex,this.addr ) } } // 通过自定义构造函数来生对象,实例化对象 // 调用执行构造函数时,都必须要和new 关键词一起使用 const obj1 = new CrtObj(‘张三‘,18,‘男‘,‘北京‘); console.log(obj1); // 调用 对象/实例化对象 中的方法 obj1.funAll(); obj1.funNameAge(); obj1.funSexAddr();
function CrtObj2(name, age, sex, addr) { // 定义属性 this.name = name; this.age = age; this.sex = sex; this.addr = addr; } // 在构造函数的 prototype 属性中,来定义实例化对象的方法 CrtObj2.prototype.fun = function(){ console.log(this.name, this.age, this.sex, this.addr); } const obj4 = new CrtObj2(‘张三‘,18,‘男‘,‘北京‘); const obj5 = new CrtObj2(‘李四‘,19,‘女‘,‘上海‘);
class Fun1{ constructor(name,age){ this.name = name; this.age = age; } f2(){ console.log(this.name , this.age); } } const obj1 = new Fun1(‘张三‘,18);
它的方法是写在函数内部的,虽然书写格式不同,方法也是定义在构造函数prototype属性中的。但是这样写起来更简便,代码的可读性更高
标签:crt 其他 模块 自己 第一个 空间 代码 没有 原型对象
原文地址:https://www.cnblogs.com/www11/p/12731267.html