问题一
1. 难度系数: ★★★
2. 技术点:
1). this
2). 闭包
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>08_阿里3</title>
</head>
<body>
<script type="text/javascript">
var name = "A"
var object = {
name: "B",
getNameFunc: function () { //定义方法
return function () {
return this.name // this是谁? window(默认的执行方式)即A
}
}
}
console.log(object.getNameFunc()()) //? A 得到当前的函数,接着去执行的是默认的执行方式
var name2 = "A"
var object2 = {
name2: "B",
getNameFunc: function () {
var that = this // 缓存this 当前this 是 object2
return function () {
return that.name2
}
}
}
console.log(object2.getNameFunc()()) //? B 执行的是that,即object2,故为B
</script>
</body>
</html>
输出:
问题二
1. 难度系数: ★★★
2. 技术点:
1). 原型与原型链
2). 对象属性查找
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>09_百度2</title>
</head>
<body>
<script type="text/javascript">
/*
测试题1
*/
function A () { //构造函数A
}
A.prototype.n = 1 //给A的原型上添加属性n
var b = new A() //根据A函数创建实例b
A.prototype = { //给A的原型指定赋值新的对象,对象有两个属性 n 和 m
n: 2,
m: 3
}
var c = new A() //创建新的实例 c
console.log(b.n, b.m, c.n, c.m) // ? ? ? ?
</script>
</body>
</html>
输出:
b.n, b.m 在 A.prototype.n = 1 中查找,故输出为 1 和 undefined
c.n, c.m 在 A.prototype = { n: 2,m: 3 } 中查找,故输出为 2 和3
构造函数_实例对象_原型
原型与原型链(详细)
问题三
1. 难度系数: ★★★★
2. 技术点:
1). 原型与原型链
2). 实例对象,构造函数,Object, Function的关系
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>10_京东1</title>
</head>
<body>
<script type="text/javascript">
var F = function(){} //定义函数 F
Object.prototype.a = function(){ //给 Object 的原型添加方法 a
console.log('a()')
}
Function.prototype.b = function(){ //给 Function 的原型添加方法 b
console.log('b()')
}
var f = new F() //创建 F 的实例 f
F.a() // ? // F (function)里面没有 a ,去原型里面找,Object 是它的原型 ,Function也是它的原型
F.b() // ?
f.a() // ?
f.b() // ? //Function 并不是 f 的原型,f 是实例对象,其原型有Object,但没有Function
</script>
</body>
</html>
输出: f.b() Function 并不是 f 的原型,故报错
问题四
1. 难度系数: ★★★★
2. 技术点:
1). 变量提升
2). this
3). 运算符优先级
4). 原型与原型链
5). 全局变量污染
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>11_阿里4</title>
</head>
<body>
<script type="text/javascript">
function Person() {
getAge = function () {
console.log(10)
}
return this
}
Person.getAge = function () {
console.log(20)
}
Person.prototype.getAge = function () {
console.log(30)
}
var getAge = function () {
console.log(40)
}
function getAge() {
console.log(50)
}
Person.getAge() // ?
getAge() // ?
Person().getAge() // ?
getAge() // ?
new Person.getAge() // ?
new Person().getAge() // ?
</script>
</body>
</html>
输出:
问题五
1. 难度系数: ★★★★★
2. 技术点:
1). 闭包
2). 作用域与作用域链
3). 变量查找
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>12_滴滴1</title>
</head>
<body>
<script type="text/javascript">
function fun(n, o) {
console.log(o)
return {
fun: function (m) {
return fun(m, n)
}
}
}
// 测试一: undefined ? ? ?
var a = fun(0)
a.fun(1)
a.fun(2)
a.fun(3)
</script>
</body>
</html>
输出:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>12_滴滴1</title>
</head>
<body>
<script type="text/javascript">
function fun(n, o) {
console.log(o)
return {
fun: function (m) {
return fun(m, n)
}
}
}
//测试二: undefined ? ? ?
var b = fun(0).fun(1).fun(2).fun(3)
</script>
</body>
</html>
输出:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>12_滴滴1</title>
</head>
<body>
<script type="text/javascript">
function fun(n, o) {
console.log(o)
return {
fun: function (m) {
return fun(m, n)
}
}
}
// 测试三: undefined ? ? ?
var c = fun(0).fun(1)
c.fun(2)
c.fun(3)
</script>
</body>
</html>
输出: