经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
对象继承深入、call_apply、圣杯模式、构造函数和闭包,企业模块化
来源:cnblogs  作者:麻花的野望  时间:2021/4/6 10:09:19  对本文有异议

一个实现加减乘除的插件:

 

 

原型其实是在构造函数之上的,构造函数变成实例化函数的时候才会有原型,

原型实际上是构造函数的一个属性

 

 

 原型无非就是2个字:继承

 

原型中继承父类所有方法是很不合理的,因为没有实际的必要

 

针对call、apply方法都只是借用指定函数的一个借用this的指向,而不会继承指定函数的原型

 

 

 

下面的优化是针对Student.prototype()=Teacher.prototype,这样就不会继承Teacher的方法,并能使用Teacher.prototype的属性与方法:

但这就形成了公共的原型更加不合理了

 

 

圣杯模式:

 

企业级解决继承的方法 :中间的空对象的prototype指向我们需要的xxx.prototype,使用中间的空对象来进行变换值不会让xxx.prototype的值进行变换

 

 

 

 

 

 

 

 

CSS中也有圣杯模式、双飞翼

圣杯布局:

 

 

 HTML:

 

 

 CSS:

  1. <style>
  2. //清除浮动 在main里面添加进去
  3. .clearfix::after{
  4. content:"";
  5. display:table;
  6. clear:both;
  7. }
  8. .wrap{
  9. width:700px;
  10. margin:0 auto;
  11. }
  12. .top ,.foot{
  13. height:50px;
  14. background-color:#000;
  15. }
  16. .main {
  17. padding:0 100px;
  18. overflow:hidden;
  19. }
  20. .main .left ,
  21. .main .right{
  22. background-color:green;
  23. }
  24. .main .left ,
  25. .main .content,
  26. .main .right{
  27. float:left;
  28. positin:releative;
  29. background-color:green:
  30. margin-bottom:-2000px;
  31. padding-bottom:2000px;
  32. }
  33. .main .left{
  34. width:100px;
  35. }
  36. .main .content{
  37. wdith:100%;
  38. margin-left:-100;
  39. background-color:red;
  40. }
  41. .main .right{
  42. left:100px;
  43. width:100px;
  44. margin-left:-100px;
  45. }
  46. </style>

 

效果:中间谁占的高,旁边的也会升高。

圣杯的布局方式:主要逻辑是通过赋值在进行布局

 

 

 

进行圣杯模式的一个封装:

刚开始:

封装后:  (super_class超级继承源)

 

 

 

 

对于闭包形成的私有变量的一个定义:如下面num只能通过add来去访问,那么num就是add方法的私有变量

 

 

 

 

函数的闭包:

 

 

 

 

 构造函数的闭包: 

 

 

 

这里如果return原始值没有影响的,但是不能返回一个啥数组,对象,针对的是原始值是没有影响的,如果是引用值的化就会报错

 

 

 

 

 

 

 

将圣杯模式用闭包来实现:

 

 

 

将其封装成一个立即执行函数:(曾经雅虎在yos3实现的一个方法)

这样是模块化开发的一种形式,多人开发是这样做的

 

 

 

 一个很牛逼的案例:

 

 

  

企业级的圣杯模式的具体代码:

  1. var inhert = (function () {
  2. var Buffer = function () {}
  3. return function (Target, Orgin) {
  4. Buffer.prototype = Orgin.prototype
  5. Target.prototype = new Buffer()
  6. Target.prototype.constructor = Target
  7. Target.prototype.sup_class = Orgin
  8. }
  9. })()
  10. var InitProgrammer = (function () {
  11. var Programmer = function () {}
  12. Programmer.prototype = {
  13. name: '程序',
  14. tool: '计算机',
  15. work: '编写应用程序',
  16. duration: '10个小时',
  17. say: function () {
  18. console.log(
  19. '我是一名' +
  20. this.myName +
  21. this.name +
  22. ',我的工作是用' +
  23. this.tool +
  24. this.work +
  25. ',我每天工作' +
  26. this.duration +
  27. ',我工作需要用到' +
  28. this.lang.toString() +
  29. '。'
  30. )
  31. },
  32. }
  33. var FrontEnd = function () {}
  34. var BackEnd = function () {}
  35. inhert(FrontEnd, Programmer)
  36. inhert(BackEnd, Programmer)
  37. FrontEnd.prototype.lang = ['HTML', 'CSS', 'JavaScript']
  38. FrontEnd.prototype.myName = '前端'
  39. BackEnd.prototype.lang = ['NODE', 'java', 'Python']
  40. BackEnd.prototype.myName = '后端'
  41.  
  42. return {
  43. FrontEnd,
  44. BackEnd,
  45. }
  46. })()
  47. var frontEnd = new InitProgrammer.FrontEnd()
  48. var backEnd = new InitProgrammer.BackEnd()
  49. frontEnd.say()
  50. backEnd.say()

 

 

企业级的协同开发:

 

模块化开发:

  1. //模块化开发
  2.  
  3. //这样是按需执行
  4. window.onload = function () {
  5. init()
  6. }
  7. function init() {
  8. initCompute()
  9. initFunctions()
  10. }
  11. var initCompute = (function () {
  12. var a = 1,
  13. b = 2
  14. function add() {
  15. console.log(a + b)
  16. }
  17. function minus() {
  18. console.log(a - b)
  19. }
  20. function mul() {
  21. console.log(a * b)
  22. }
  23. function div() {
  24. console.log(a / b)
  25. }
  26. return function () {
  27. add(), minus(), num()
  28. }
  29. })()
  30. var initFunctions = (function () {})()

 

 插件化开发:

  1. // 插件化开发
  2. ;(function () {
  3. var Silder = function (opt) {}
  4. Slider.prototype = {}
  5. window.Slider = Slider
  6. })()
  7. var slider = new Slider({})

 

      作业:
      打印一个参数之内能够被3或5或7整除的数
      打印斐波那契数列的第N位
      打印从0到一个数的累加值

原文链接:http://www.cnblogs.com/mahuablog/p/14612298.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号