可以通过 fn(object, 'a.b.c') 获取到 object.a.b.c 的值为'c5' const object = { a: { b: { c: 'c5', d: 2 } } }
时间: 2024-05-07 22:20:29 浏览: 23
可以使用以下代码实现:
```javascript
function fn(obj, path) {
const keys = path.split('.');
let value = obj;
for (let key of keys) {
value = value[key];
}
return value;
}
const object = {
a: {
b: {
c: 'c5',
d: 2
}
}
};
console.log(fn(object, 'a.b.c')); // 输出 'c5'
```
函数 `fn` 接收两个参数,第一个参数是要获取值的对象,第二个参数是表示要获取哪个属性的路径(使用点号连接属性名)。函数内部将路径拆分成数组,然后遍历数组,逐层获取属性值,直到获取到最终的值。
相关问题
可以通过fn(object,‘a.b.c’)获取到object.a.b.c的值为‘c5’,js写法
这可以用以下代码实现:
```javascript
function fn(obj, path) {
const keys = path.split('.');
let value = obj;
for (let key of keys) {
value = value[key];
}
return value;
}
// 示例用法
const object = {
a: {
b: {
c: 'c5'
}
}
};
const result = fn(object, 'a.b.c'); // 返回值为 'c5'
```
这个函数接受两个参数,第一个参数是要访问的对象,第二个参数是访问路径。访问路径需要以点号分隔每个键名。函数内部将路径分割为键名数组,然后使用循环遍历键名数组,逐层访问对象的属性,直到获取到最后一个属性的值。最后将这个值作为返回值返回。
Function.prototype.sx_bind = function (obj, ...args) { obj = obj || window const fn = Symbol() obj[fn] = this const _this = this const res = function (...innerArgs) { if (this instanceof _this) { this[fn] = _this this[fn](...[...args, ...innerArgs]) delete this[fn] }else { obj[fn](...[...args, ...innerArgs]) delete this[fn] } } res.prototype = Object.create(this.prototype) return res }解释一下这串代码
这段代码是在 Function.prototype 上扩展了一个名为 sx_bind 的方法,实现了类似于原生 bind 方法的功能。它的作用是将函数绑定到指定对象并返回一个新的函数,调用新函数时 this 指向绑定的对象,同时可以给新函数传递一些固定的参数。
具体实现如下:
1. 首先定义一个 Symbol 类型的变量 fn,用于在绑定的对象上创建一个唯一的属性,以免属性名冲突。
2. 将绑定的对象赋值给 obj,如果没有传入对象则默认使用全局对象 window。
3. 将当前函数保存在 obj[fn] 中,这样可以在新的函数中调用。
4. 定义一个新的函数 res,该函数接受任意参数,当调用新函数时,首先会将传递给新函数的参数和绑定函数时传递的参数合并,然后再调用保存在 obj[fn] 中的函数。
5. 如果调用新函数时使用了 new 操作符,则认为是构造函数的调用,此时需要将 this 指向新创建的对象,并将绑定函数作为构造函数调用。
6. 如果没有使用 new 操作符,就直接将绑定函数作为普通函数调用,并将 obj 作为 this 指向。
7. 最后将新函数的原型继承自绑定函数的原型,以保证继承链的正确性。
使用该方法可以方便地将函数绑定到指定对象,并返回一个新的函数,以后调用新函数时就不需要再手动指定 this 了。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)