原生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).):
- 举例:
注:(能使用其他模式的情况下,尽量不要使用这种模式,因为 return 回来的对象与构造函数或构造函数原型没有任何关系);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"
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).如遇错误,欢迎指正;