zoukankan      html  css  js  c++  java
  • js面向对象-创建对象

    工厂模式

    工厂模式通过在函数中创建一个对象(原材料),然后通过给这个对象添加属性和方法(加工),最后返回这个对象(出厂)。

    // 1.工厂模式
    function createPerson(name,age,job) {
    	//1.原材料
    	var o = new Object(); 
    	//2.加工 
    	o.name = name;
    	o.age = age;
    	o.job = job;
    	o.sayName = function() {
    		alert(this.name);
    	};
    
    	//3.出厂
    	return o;
    }
    var yoomin = createPerson('yoomin',24,'programmer');  // 调用,没有new
    

      构造函数模式

    构造函数是通过给this添加属性和方法,在new的时候才返回一个对象,构造函数本身是没有返回值的。

    // 2.构造函数模式
    function Person(name,age,job) {
    	this.name = name;
    	this.age = age;
    	this.job = job;
    	this.sayAge = function() {
    		alert(this.age);
    	}
    }
    var Jay = new Person('Jay',30,'singer');  //调用
    

    构造函数方式与原型方式组合

    使用构造函数方式定义属性,用原型方式定义方法和共享变量:

    构造函数定义属性:

    function Person(name,age,job) {
    	// 构造函数模式定义实例属性
    	this.name = name;
    	this.age = age;
    	this.job = job;
    }
    

      原型方式定义方法:

    Person.prototype = {
    	//原型模式定义方法和共享属性
    	constructor: Person,  //重写原型改变了constructor,修正回来
    	sayName:function() {
    		alert(this.name);
    	},
    	sayJob:function() {
    		alert(this.job);
    	}
    }
    

      注意:用字面量方式定义prototype,会改变prototype的constructor指向,需要修正。

    创建对象:

    var Kelly = new Person('Kelly',35,'singer');  //调用
    Kelly.sayName();  //Kelly
    

      

  • 相关阅读:
    手机网络制式常识
    合并两个有序数组a和b到c
    N皇后问题
    数独求解
    ARM处理器模式
    ARM异常中断处理
    国风·召南·野有死麕
    八大排序算法
    1045 Favorite Color Stripe (最长不下降子序列 LIS 或最长公共子序列 LCS)
    1066 Root of AVL Tree (模拟AVL建树)
  • 原文地址:https://www.cnblogs.com/yoomin/p/3932976.html
Copyright © 2011-2022 走看看