刷题笔记(第二天)

1.描述:查找两个节点的最近的一个共同父节点,可以包括节点自身
输入描述:oNode1 和 oNode2 在同一文档中,且不会为相同的节点

function commonParentNode(oNode1, oNode2) {
            if(oNode1.contains(oNode2)) {
                return oNode1;
            } else if (oNode2.contains(oNode1)) {
                return oNode2;
            } else {
                return commonParentNode(oNode1.parentNode, oNode2);
            }

        }

contains方法是js的原生方法,用于判断dom中的包含关系。

contains方法只能判断dom元素的包含,参数是Element类型。

var A = document.getElementById('parent'); var B = document.getElementById('children'); console.log(A.contains(B)) ; //true console.log(B.contains(A));//false

2.描述:函数 useArguments 可以接收 1 个及以上的参数。请实现函数 useArguments,返回所有调用参数相加后的结果。本题的测试参数全部为 Number 类型,不需考虑参数转换。

function useArguments() {
            let sum = 0;
            for(let i=0;i

arguments参数是传递给函数的所有参数的集合。无论是否有明确定义对应的形参,通过它我们可以访问到函数的所有参数。借此可以实现原生JavaScript并不支持的函数重载的特性,而且可以实现接收参数数量可变的可变函数。

arguments对象有一个名为length的属性,表示实参的确切个数。通过数组索引的方式可以获取单个参数的值,例如,arguments[2]将获取第三个参数。

我们可以使用arguments.length属性来获取传递给函数的实际参数的个数。

通过数组下标的方式还可以访问到arguments参数中的每个参数值。值得注意的是,这里也包括没有和函数形参相关联的剩余参数。

// 上面的题,也可以把参数转换成数组,进行累加
function useArguments() {
    let arr = [...arguments];
    return arr.reduce((total, num)=> total += num)
}

3.描述:给定一个构造函数 constructor,请完成 alterObjects 方法,将 constructor 的所有实例的 greeting 属性指向给定的 greeting 变量。
示例1
输入:
var C = function(name) {this.name = name; return this;}; 
var obj1 = new C('Rebecca'); 
alterObjects(C, 'What\'s up'); obj1.greeting;
输出:
What's up

function alterObjects(constructor, greeting) {
    constructor.prototype.greeting=greeting;
}

改变所有实例对象的greeting属性,而实例对象又是由构造函数创建出来,此时我们又无法改写构造函数,所以最直接的是改变这个构造函数的原型。
总结:实例对象是由构造函数创建出来的,当在实例对象上找不到对应的属性(实例对象的构造函数上无对应的属性),那么就会去构造函数的原型上查找对应属性,故改变所有实例对象的对应属性,即直接改变实例对象所对应的构造函数的原型即可。

你可能感兴趣的:(笔记)