从传输中了解代码.js

understanding the code from transit.js

本文关键字:代码 js 了解 传输      更新时间:2023-09-26

我只是通过过境源.js遇到了以下功能:

  $.cssHooks['transit:transform'] = {
    // The getter returns a `Transform` object.
    get: function(elem) {
      return $(elem).data('transform') || new Transform();
    },
    // The setter accepts a `Transform` object or a string.
    set: function(elem, v) {
      var value = v;
      if (!(value instanceof Transform)) {
        value = new Transform(value);
      }
      // We've seen the 3D version of Scale() not work in Chrome when the
      // element being scaled extends outside of the viewport.  Thus, we're
      // forcing Chrome to not use the 3d transforms as well.  Not sure if
      // translate is affectede, but not risking it.  Detection code from
      // http://davidwalsh.name/detecting-google-chrome-javascript
      if (support.transform === 'WebkitTransform' && !isChrome) {
        elem.style[support.transform] = value.toString(true);
      } else {
        elem.style[support.transform] = value.toString();
      }
      $(elem).data('transform', value);
    }
  };
我理解函数的

后半部分,但真的很难理解函数的初始部分,函数也可以在 git 上找到,这里 .

最初我看到的是这个,$.cssHooks['transit:transform']那句话到底在说什么?

之后我们有下面的代码行,即 getter 和 setter 方法,

set: function(elem, v) {

但是谁在函数内部传递 elem 和 v,我没有看到任何传递?

在 jQuery 上阅读 cssHooks 的信息 cssHooks

查看源代码(搜索hooks.gethooks.set

.cssHooks 是包含 gettersetterobjects array,将由 .css() 执行。仅此而已。


    $.cssHooks['transit:transform'] = {set: function(elem,value){}, get: function(elem){}}
     equal:
    $.cssHooks['transit:transform'] = {};
    $.cssHooks['transit:transform'].set = function(elem, value){};
    $.cssHooks['transit:transform'].get = function(elem){};
    $(element).css('transit:transform',value)
     comes to:
    $.cssHooks['transit:transform'].set(element,value)
    $(element).css('transit:transform')
     comes to:
    $.cssHooks['transit:transform'].get(element)

$.cssHooks['transit:transform'] = {set:function(){}, get: function(){} }

{...}是对象创建。
getset此刻尚未执行。
他们创造了{set:function(){}, get: function(){} }


所以,简单地说:.css()将为钩子属性执行setget函数。


如果你想知道真正的getters和setter是如何工作的:Object.defineProperty()

在 Javascript 中,您可以使用以下语法添加/访问属性:

myObject.myProperty

或使用此语法:

myObject['myProperty']

这是相同的结果

所以你的线

$.cssHooks['transit:transform'] 

只是意味着我们想将一个对象(原始帖子中 {} 之间的代码)存储在 'transit:transform' 属性中,该属性位于 $ 对象内的 cssHooks 属性中

这是同样的事情:

$['cssHooks']['transit:transform']

他们使用 [''] 语法的原因是 transit:transform 包含 ':' char,如果你想以这种方式访问它,这是不允许的:

$.cssHooks.transit:transform //doesn't work

编辑:

回答你的第二个问题,我不知道...您显示的代码只是"传输:转换"属性的"描述"