1、前端做什么?
网页、游戏、app、小程序、后台应用、桌面应用
2、js由哪三个方面组成:DOM、BOM、ECMAScript
DOM:文档操作模型,主要是操作标签
BOM:浏览器对象模型
ECMAScript:语法、变量、函数。。。
3、用构造函数的方式创建对象
function Student(name,age,score){
this.name = name;
this.age = age;
this.score = score;
this.eat = function(){
console.log(this.name+",晚上吃了什么?");
}
}
var stu = new Student('张三',23,80);
stu.eat();
4、构造函数+原型链的方式创建对象
function Product(name,color){
this.name = name;
this.color = color;
}
Product.prototype.buy = function(){
console.log('buy');
}
var flight = new Product('大疆无人机','白色');
flight.buy();
var kh = new Product('口红','红色');
kh.buy();
console.log(flight.buy == kh.buy);
//可以通过对象的__proto__.buy修改
flight.__proto__.buy = function(){
console.log("buy 这是修改后的");
}
flight.buy();
kh.buy();
5、原型
function Product(name,color,price){
this.name = name;
this.color = color;
this.price = price;
}
var p = new Product("大疆无人机",'白色',299);
console.log(p.constructor==Product);
console.log(p.__proto__==Product.prototype)
console.log(Product.prototype.isPrototypeOf(p));
console.log(Object.prototype.isPrototypeOf(p));
console.log(Product.prototype.__proto__==Object.prototype);
console.log(Object.prototype.__proto__);
console.log(Object.prototype.isPrototypeOf(Product.prototype));
6、原型链
7、变量提升
7.1、如果一个变量声明以后,会把变量的声明提升到整个作用域的最前面,但是赋值还是原来的位置
7.2、如果一个变量没有声明直接赋值,作用域就是赋值以后的区域可以使用
7.3、通过function 函数名(){}定义的函数,会把整个函数提升到作用域的最前面
7.4、全局变量和局部变量同时生效,优先局部变量
7.5、如果一个变量没有声明直接赋值,作用域就是赋值以后的区域可以使用
7.6、js中只有函数的作用域,声明变量的作用域,是向上寻找距离该变量最近的开始的函数的{变量的作用范围就是{}以内
8、作用域和作用域链
8.1、作用域:在js中只有函数的作用域,在函数内部声明的变量,才称为局部变量
全局和局部变量只是相对来说的
8.2、作用域链:在某个作用域内使用变量的时候,首先会在该作用域内寻找该变量,如果没有会一致向上寻找,
这样的一种链式关系就是作用域链.其实指的就是变量的就近原则
9、属性特征
var Person = {
name: '张三',
age: 20,
sex: '男'
}
//重新创建属性
Object.defineProperty(Person,'password',{
value:'123',
// 是否可以被修改
writeable:false,
// 是否可以被遍历
enumerable:false,
// 是否可以被重新配置
configurable:false
});
//不能被遍历
for (let key in Person) {
console.log(key,Person[key]);
}
console.log(Person.password);
//不可以重新赋值
Person.password = "234";
console.log(Person.password);