原生js-—动态原型模式、寄生构造函数模式、稳妥构造函数模式

原生js-—动态原型模式、寄生构造函数模式、稳妥构造函数模式

1.动态原型模式(要new):
  • 举例:

    	function Model(name,age,hobby){
    		this.name = name;
    		this.age = age;
    		this.hobby = hobby;
    		//方法(如果show()方法不存在,才会动态添加,而且这个方法在初次调用构造函数才会执行,不调用构造函数就不会执行,这里对原型做的修改,能够在实例中立刻得到反映);
    		if(typeof this.show != "function"){
    			Model.prototype.show = function(){
    				alert(this.name);
    			}
    		}
    	}
    	
    	var object5 = new Model("YYM",20,"baseball");
    		object5.show();
    
    
2.寄生构造函数模式(要new,和工厂模式的唯一区别就是,要使用new来创建对象。查看工厂模式:link(https://blog.csdn.net/qq_43495629/article/details/87876613).):
  • 举例:
    	function createModel(name,age,hobby){
    		var o = {};
    		o.name = name;
    		o.age = age;
    		o.hobby = hobby;
    		o.show = function(){
    			alert(this.name);
    		};						//注意这里的分号;
    		return o;				//返回这个对象;
    	}
    	
    	var object1 = new createModel("YYM",20,"baseball");
    		object1.show();      //"YYM"
    
    :(能使用其他模式的情况下,尽量不要使用这种模式,因为 return 回来的对象与构造函数或构造函数原型没有任何关系);
3.稳妥构造函数模式(不new,不使用this,无公共属性,要访问函数内部的自定义私有属性,只能通过创建对象来调用本函数内部自定义的属性访问方法,来获得私有属性的访问权。有点 java 中的getter(),setter()的味道):
  • 举例:

    	function createModel(name,age,hobby){
    		var o = {};
    		//可以自己在这里定义私有属性和函数;
    		
    		//方法;
    		o.show = function(){
    			alert(name);		//注意这里不再使用this;
    		};						//注意这里的分号;
    		return o;				//返回这个对象;
    	}
    	
    	var object1 = createModel("YYM",20,"baseball"); //不new
    		object1.show();      //"YYM"
    

    注:变量 object1 中保存的是稳妥对象,除了使用 show() 方法 以外,无法访问其数据属性,它和构造函数也无任何关系;

    如要查看工厂模式、构造函数模式、原型模式
    请查看:link(https://blog.csdn.net/qq_43495629/article/details/87876613).

    如遇错误,欢迎指正;

发布了56 篇原创文章 · 获赞 51 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43495629/article/details/87880635