1.new操作符具体干了什么呢
(1)隐式创建了一个空对象;
(2)将该对象的__proto__ 指向该构造函数的prototype原型;
(3)将this指向该空对象,在该对象上添加属性和方法
(4)隐式返回该对象
2.用过哪些设计模式
工厂模式
3.call()和apply()的区别和作用
call()和apply()可以改变函数内this的指向,让this指向特定的对象
不同点:参数列表不同,apply需要将参数封装为数组传递,call方法普通传递
4.JavaScript对象的几种创建方式
1字面量创建
2.实例创建(new关键字)
3.工厂模式创建
4.构造函数创建
5.原型创建
6.混合创建,构造函数(可变的)+原型(共享,不变的)
5.JavaScript对象的几种继承方式
1.原型链继承
2.对象冒充继承
3.组合继承(对象冒充+原型链)
4.寄生组合式继承
6.JavaScript原型,原型链
js每声明一个function,都有prototype原型,prototype原型是函数的一个默认属性,在函数的创建过程中由js编译器自动添加。也就是说:当生产一个function对象的时候,就有一个原型prototype。原型中存储对象共享的属性和方法。
原型链:
当你定义一个函数对象的时候,其内部就有这样一个链表关系。声明foo对象,自带了_proto_的属性,而这个属性指向了prototype,从而实现对象的扩展(例如继承等操作)
7.如何判断一个对象是否属于某个类
instanceof,返回布尔型
8.小贤有一条可爱的狗(Dog),他的叫声很好听(wow),每次看到主人的时候就会乖乖叫一声(yelp),从这段描述可以得到
以下对象:
function Dog(){
this.wow = function(){
alert(‘wow’);
}
this.yelp = function(){
this.wow();
}
}
小芒和小贤一样原来也有一条可爱的狗,可是突然有一点疯了(MadDog),一看到人就会每隔半秒叫一声(wow)地不停叫唤(yelp)。
请根据描述,按示例形式用代码来实现。(继承,原型,setInterval)
function Dog() { this.wow = function() { alert('wow'); } this.yelp = function() { this.wow(); } }
<span class="token keyword">function</span> <span class="token function">MadDog</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> Dog<span class="token punctuation">.</span><span class="token function">call</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> _this <span class="token operator">=</span> <span class="token keyword">this</span><span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function-variable function">yelp</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token function">setInterval</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> _this<span class="token punctuation">.</span><span class="token function">wow</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token number">500</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
9.使用正则表达式验证邮箱
xxx@xx.xx
/^[0-9a-zA-Z]+@[0-9a-zA-Z]+.[a-zA-Z]+$/
10.请用js去除字符串空格 var str = “fdf er re545 6565 2fdfd”
var arr = str.split(’ ‘);
var str1 = arr.join(’’);
console.log(str1);
11.判断字符串是否是这样组成的。第一个字符必须是字母,后面可以是字母、数字、下划线,总长度5-20.
用正则,正则表达式为:
var reg = /^[a-zA-Z]\w{4,19}$/
12.闭包的概念、特点以及使用规则
闭包(closure)指有权访问另一个函数作用域中变量的函数。简单理解就是 ,一个作用域可以访问另外一个函数内部的局部变量。
特点:
1.函数嵌套函数
2.函数内部可以应用外部的参数和变量
3.参数和变量不会被垃圾回收机制回收闭包中使用的变量会一直存储在内存中,类似全局变量 ,避免全局污染,可以解决全局变量的问题。
13.用闭包方式完成下面代码的修改,使得属性name,id外界不可见
User = function(){}
User.prototype={
id:"",
Name:"",
getId:function(){return this.id},
setId:function(){this.id = id},
getName:function(){return this.name},
setNmae:function(){this.name = name}
}
var User = function() {
var id = "id";
var name = "name";
this.__proto__ = {
getId: function() {
return id;
},
setId: function(_id) {
id = _id;
},
getName: function() {
return name;
},
setName: function(_name) {
name = _name;
}
}
}
var u = new User();
u.setId("007");
u.setName("tom");
console.log(u.name, u.getName()); //undefined,tom
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
14.创建ajax的过程
function ajax(type, url, callback, params) {
//1.创建请求对象
var xhr = new XMLHttpRequest;
//2.发生请求
if (type == 'get' || type == 'GET' && params != undefined) {
xhr.open(type, url + '?' + params, true);
} else {
xhr.open();
}
//3.获取响应数据
xhr.onreadystatechange = function() {
if (this.readyState === 4 && this.status === 200) {
callback(this.responseText)
}
};
//4.发生数据
if (type == 'post' || type == 'POST' && params != undefined) {
xhr.send(type, params);
} else {
xhr.send(null);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
15.ajax请求的时候get和post方式的区别,什么时候用post
1、get请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给WEB服务器。当然在Ajax请求中,这种区别对用户是不可见的
2、get传输数据容量小,不安全,post传输数据内容大,更加安全;当向服务器发生一些数据的时候选择post比较安全
16.ajax请求时,如何解释json数据
如果是字符串形式的json:eval("("+ajax.response+")")
如果是本地的json文件:JSON.parse(data)
17.同步异步的区别?
同步代码会依次执行,执行完这一行,执行下一行 异步代码执行不按顺序,‘跳过’执行,待其他某些代码执行完后,再来执行
异步代码会在同步代码之后执行,同步执行完之后才会执行异步
18.常见的http状态码
1xx 代表请求已接受
2xx 代表请求已成功被服务器接收、理解并接受
3xx 代表客户端需要采取进一步的操作才能完成请求
4xx 表示请求错误
5xx 代表了服务器在处理请求的过程中又错误或者异常状态发生
19.eval的作用是
eval函数是强大的数码转换引擎,字符串经eval转换后得到一个javascript对象,
举简单例子:
var a = eval(“5″);等效于var a = 5;
var a = eval(“’5′”);等效于var a = ’5′;
var obj = eval(“({name:’cat’,color:’black’})”);等效于 var obj = {name:’cat’,color:’black’};
eval(“alert(‘hello world!’);”);等效于 alert(‘hello world!’);
- 1
- 2
- 3
- 4
- 5
20.解释touch.js以及使用场景
21.touch.js如何监听事件?有哪些事件
22.touch.js事件配置
23.使用touch.js快速搭建移动端页面
24.$(document).ready()方法和window.onload有什么区别
时间:前者先执行
$(docunment).ready()是在DOM文档结构绘制完成后,执行,不必等待页面所有元素加载完成
widows.onload是在页面包括图片在内的所有元素加载完成后执行 执行方法数量不同
$(document).ready()可以一次执行多个方法
windows.load只执行一个
25.jQuery的属性拷贝(extend)的实现原理是什么,如何实现深拷贝
浅拷贝(只复制一份原始对象的引用,也就是地址) var newObject = $.extend({}, oldObject);
深拷贝(对原始对象属性所引用的对象进行递归拷贝) var newObject = $.extend(true, {},
oldObject);
26.jQuery中attr和prop的区别以及使用场景
对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。
对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。处理表单元素的时候使用prop方法
对于dom自定义属性使用attr方法
27.jQuery里的each()是什么函数?你是如何使用它的
遍历函数,又称迭代函数,
对于数组,对象等使用$.each(obj,fn);遍历节点的时候使用$(‘select’).each(fn);
28.jQuery对象和DOM对象是怎样转换的
jQuery转DOM —$(‘DOM’)[0]
DOM转jQuery—$(DOM)
29.jQuery中使用过哪些插入节点的方法,他们的区别是什么
方法 | 描述 |
---|---|
append() | 向每个匹配的元素内部追加内容 |
appendTo() | 功能跟append()一样,只是颠倒了append的操作 |
prepend() | 向每个匹配的元素内部前置内容 |
prependTo() | |
after() | 在每个匹配的元素之后插入内容 |
insertAfter() | |
before() | 在每个匹配的元素之前插入内容 |
insertBefore() |
30.简单讲述一下jQuery是怎么处理事件的,有哪些事件?
31.jQuery中有事件冒泡吗,它是怎么执行的,如何来停止冒泡事件
有事件冒泡,
由内向外触发,触发子元素,父元素也会受到影响停止冒泡:
使用stopstopPropagation;
使用retrun false;
使用阻止默认行为preventDefault;
32.jQuery中$(this)和this之间的区别
$(this)是一个Jquery对象,有各种方法可以给我们调用;
this则是html中的当前元素,即使是在Jquery方法中引用this,它依然是html元素,只有当你写成$(this)才会转变成一个Jquery对象。
33.怎么解决跨域问题
1.服务器允许跨域
2.使用代理服务器(中转服务器)
3.第三方软件—live server
4.jsonp技术----核心技术:利用script标签中的src属性
34.ajax的缺点
优点:
1.不需要插件支持
2.优秀的用户体验
3.提高web程序性能
4.减轻服务器和带宽的压力缺点:
1.破坏了浏览器的前进、后退按钮的正常功能
2.对搜索引擎支持不足
35.ajax如何实现异步定时5秒刷新
setInterval(function(){
host = window.location.host
$.post(“http://”+host+"/index.php/Article/cpMes/value/1");
},5000);
- 1
- 2
- 3
- 4
36.页面编码和被请求的资源编码如果不一致如何处理
比如:http://www.yyy.com/a.html 中嵌入了一个http://www.xxx.com/test.js a.html
的编码是gbk或gb2312的。 而引入的js编码为utf-8的 ,那就需要在引入的时候同理,如果你的页面是utf-8的,引入的js是gbk的,那么就需要加上charset=“gbk”.
37.jQuery中$.get()提交和$.post()提交有区别吗
1.参数传递机制不一致:
get:在请求地址中传递参数
post:在再请求方法(请求体)中传递参数
2.传递的数据量大小不一致
get:有大小限制(最大2k)
post:理论上没有限制
3.安全性
get:参数在地址中传递,会在浏览器中被缓存,
post:不会有缓存
38.jquery.extend与jquery.fn.extend的区别
jquery.extend是为jQuery对象新增方法
jquery.fn.extend是为元素对象新增方法
39.解释什么是Zepto,jQuery和Zepto的区别在哪里
zepto是移动端开发框架,是jQuery的轻量级替代品,API及语句与jQuery相似,但文件更小(可压缩至8k),是目前功能完备的库中,最小的一个。为了保持源码的精简,Zepto默认只加载一些模块,当需要某些模块时,可以把对应的模块加载进来。
区别:
jQuery更多是在PC端被应用,因此考虑了很多兼容性问题,zepto.js则是直接抛弃了兼容问题,显得更加轻盈。
Zepto.js在移动端被运用的更加广泛
jQuery的底层是通过DOM来实现效果的,而Zepto.js是用css3来实现的
Zepto.js可以说是jQuery的轻量版
40.Zepto事件委托?
41.Zepto相关事件以及使用