小编Kev*_*vvv的帖子

方法必须在一个被链接在一起的对象中吗?

我试图理解链接函数在JavaScript中是如何工作的.我有两个例子:

第一

    class Arithmetic {
      constructor() {
        this.value = 0;
      }
      add(value) {
        this.value = this.value + value;
        return this;
      }
     subtract(value) {
     this.value = this.value - value;
     return this;
     }
   }
Run Code Online (Sandbox Code Playgroud)

您可以通过实例化let a = new arithmetic();和链接方法a.add(3).subtract(4);

第二

var zappo = function(selector) {
  var el;

  var obj = {
    getEl(selector) {
    return document.querySelector(selector);
    },
    addClass(className){
    el.classList.add(className);
    return this;
    }
  }

  el = getEl(selector);
  return obj;
}
Run Code Online (Sandbox Code Playgroud)

我可以通过链接这些方法 zappo(#main).addClass("green").addClass("red");

我的问题是为什么第一个构造函数能够在没有对象内的方法的情况下链接函数,而第二个函数需要所有方法都在一个对象中?

javascript constructor function object

1
推荐指数
1
解决办法
47
查看次数

如何在 Typescript 中为解构变量分配类型?

如果我想为传递给函数的每个解构参数分配不同的类型,而不是统一的类型,那么格式应该是什么?

例如,如果我希望所有三个变量都是字符串,则它将采用以下格式:

const Auth = ({ history, match, path }: string) => {
    //content
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我希望第一个是对象,第二个是字符串,第三个是数组怎么办?

javascript typescript reactjs typescript-typings

1
推荐指数
1
解决办法
4841
查看次数

如何有条件地解构对象?

我有以下解构:

const {
    user: {
        username,
        image,
        uid
    } = {},
    gallery: {
        image: picture,
    } = {},
} = data
Run Code Online (Sandbox Code Playgroud)

问题是gallery有时null(不是picture内部gallery),即使我需要的是picture内部gallery存在时。换句话说,gallery: null,不是gallery.image: null

因此,我得到:

null 不是对象

的错误消息gallery.image

我如何有条件地解构以便gallery.image在它存在时使用它,但gallery在为空时不解构?

javascript destructuring ecmascript-6 reactjs

1
推荐指数
1
解决办法
1848
查看次数

在视图坐标系之间转换点

我很难理解convert(_:to:)和之间的区别convert(_:from:)由于某种原因,

\n

假设我有两种观点(superViewsubview)和一个根视图:

\n
let superView = UIView(frame: CGRect(origin: .init(x: 25, y: 25), size: CGSize(width: 100, height: 100)))\nrootView.addSubview(view)\n\nlet subview = UIView(frame: CGRect(origin: .init(x: 25, y: 25), size: .init(width: 50, height: 50)))\nsuperView.addSubview(subview)\n
Run Code Online (Sandbox Code Playgroud)\n

convert(_:to:)根据文档,将接收器\xe2\x80\x99s 坐标系中的点转换为指定视图的

\n
let convertToWindow = subview.convert(subview.bounds, to: window)\n// {x 50 y 50 w 50 h 50 }\n
Run Code Online (Sandbox Code Playgroud)\n

convert(_:from:)根据文档,将给定视图的坐标系中的点转换为接收器的坐标系

\n
let convertFromWindow = subview.convert(subview.bounds, from: window)\n// {x -50 y -50 w 50 h …
Run Code Online (Sandbox Code Playgroud)

objective-c uiview ios swift

1
推荐指数
1
解决办法
1230
查看次数

为什么 ClipsToBounds 会阻止子视图被触摸?

假设您有一个超级视图,其尺寸小于其子视图。您将clipsToBound超级视图的属性设置为false。如果点击子视图超出父视图边界的突出区域,为什么命中测试返回 nil?

我的理解是,命中测试从子视图开始,一直到超级视图。那么为什么晚于子视图测试的父视图的属性很重要呢?或者命中测试是否从根开始到树视图(例如视图控制器 -> 主视图 -> 子视图)?

我从这里找到了一个自定义命中测试,它确实允许您点击超级视图边界之外的子视图区域,但我不确定为什么反转子视图的顺序会产生影响(它有效,我是只是不知道为什么)。我的示例甚至只有一个子视图。

class ViewController: UIViewController {
    let superview = CustomSuperview(frame: CGRect(origin: .zero, size: .init(width: 100, height: 100)))
    let subview = UIView(frame: CGRect(origin: .zero, size: .init(width: 200, height: 200)))

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.addSubview(self.superview)
        self.superview.backgroundColor = .red
        self.superview.clipsToBounds = false
        
        self.superview.addSubview(self.subview)
        self.subview.backgroundColor = .blue
         
        let tap = UITapGestureRecognizer(target: self, action: #selector(tapped))
        self.subview.addGestureRecognizer(tap)
    }
    
    @objc func tapped(_ sender: UIGestureRecognizer) {
        print("tapped")
    }
}

class CustomSuperview: UIView {
    override func hitTest(_ …
Run Code Online (Sandbox Code Playgroud)

hittest touch-event ios swift

1
推荐指数
1
解决办法
625
查看次数