JS初级简答题

  • 1.JS面向对象继承都有哪几种写法,请详细写出具体代码并附上上下文解释。
    原型继承:
    (1)子类.prototype = new 父类;
    子类.prototype.constructor = 子类;
    继承父类所有的属性和方法
    (2)子类.prototype = 父类.prototype;
    子类.prototype.constructor = 子类;
    直接使用父类的原型对象来覆盖子类原型对象
    构造函数继承:(父类在子类中使用)
    call():有多个参数,取决于父类实例化的时候需要传多少个参数
    play():有两个参数,第二个参数是数组
  • 2.简述原型链。
    实例化出来的对象的原型就是其构造函数的原型对象;
    构造函数的原型对象的原型是Object的原型对象;
    Object的原型对象的原型是null;
    p1 是 Person() 实例化出来的对象
    p1.proto 指向 Person.prototype;
    Person.prototype.proto 指向 Object.prototype;
    Object.prototype.proto 指向 null;
  • 3.详细描述 _ _ proto _ _ 、prototype和constructor。
    _ _ proto _ _ 原型(指向构造函数的原型对象)
    prototype原型对象(指向object)
    constructor (指向)构造函数
    4.实现一个数组的深拷贝有几种写法,分别是什么?
1.for循环
let arr = [1,2,3,4,5];
let arr1 = [];
for(let i = 0;i < arr.length;i++){
    arr1[i]  = arr[i];
}
console.log(arr1);//[1, 2, 3, 4, 5]
2.concat();
let arr2 = [].concat(arr);
console.log(arr2);//[1, 2, 3, 4, 5]
3.   ...
let arr3 = [...arr];
let [...arr4] = arr;
console.log(arr3);//[1, 2, 3, 4, 5]
console.log(arr4);//[1, 2, 3, 4, 5]

5.canvas画圆方法里是什么?参数分别是什么?

ctx.arc();
6个参数
1.圆心x
2.圆心y
3.半径R
4.起始点和0度j夹角
5.结束点和0度夹角
6.bool(false默认值,顺时针;true逆时针)

6.简述let 和 var 的区别。
var:(1)存在变量的提升;(2)允许重复声明变量;
let:(1)不存在变量的提升;(2)不允许重复声明变量;(3)块级作用域(局部变量)
7.简述箭头函数和普通函数的区别。
1.箭头函数不能用于构造函数,普通函数可以;
2.箭头函数全都是匿名函数;
3.箭头函数不具有arguments对象,而每一个普通函数调用后都具有一个arguments对象;
4.this指向不同,箭头函数(我被定义时,定义的环境中this指向谁,我的this就指向谁),普通函数(谁调用我,我的this指向谁);
8.在数组原型上补偿一个数组去重的方法。
9.canvas 编程:画一个边框10px颜色为黑色,填充颜色为红色,宽高100px的正菱形,菱形的中心店在屏幕正中间。
10.书写正则验证用户名,要求长度在6-16位,以字母开头,允许字母数字下划线。
/^[a-zA-Z]\w{5,15}$/g
11.请用工厂模式创建一个对象。

function fn1(name,sex,age){
    var obj = new Object();
    obj.name = name;
    obj.sex = sex;
    obj.age = age;
    return obj;
}

12.简述帧频率跟计时器的区别及原理,并用帧频率的方式实现一个小球移动。

 // 获取canvas标签
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
    // 时间轴
    var timer = 0;
    var deg = Math.PI / 180;
    var x1 = 100;
    var y1 = 100;
    var y2 = 300;
    var r = 20;
    function run() {
        // 帧频率
        var a = requestAnimationFrame(run);
        // console.log(a);
        timer++;
        // console.log(timer);
        canvas.width = canvas.width;
        x1 += 2;
        ctx.beginPath();
        ctx.arc(x1, y1, r, 0, 360 * deg);
        ctx.strokeStyle = '2';
        ctx.fillStyle = 'red';
        ctx.fill();
        ctx.stroke();
    }
    run();
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. JS创建变量的5种方式?varletconstfunctionexport/import 2. var,le...
    Angel_6c4e阅读 850评论 0 13
  • 1.js当中有哪些数据类型 5个基础:字符串,布尔,数值,null,undefined,1个复杂:Object在e...
    林不羁吖阅读 270评论 0 0
  • 15、正则 正则就是一个规则,用来处理字符串的规则1、正则匹配编写一个规则,验证某个字符串是否符合这个规则,正则匹...
    萌妹撒阅读 1,506评论 0 1
  • 1.setTimeout() js中规定,定时器的第二个参数设置最少不能小于4ms, 小于的话就按最小的4ms执行...
    X1028阅读 446评论 0 0
  • 第一章 错误处理: 错误: 程序运行过程中,导致程序无法正常执行的现象(即bug) 现象: 程序一旦出错,默认会报...
    fastwe阅读 1,151评论 0 1