in运算符 可以检查该对象是否有该属性
对象是保存到堆内存中的,栈内存保存的是对象的地址 ;
当比较两个基本类型时,比的就是值,当比较的是两个引用数据类型时,比的是对象的内存地址,
对象的字面量
var obj = {};
obj.name = "笨笨狗";
var obj2 = {
name :"憨憨狗",
age : 18,
gender: "男",
}
函数
函数可以封装一些功能,在需要时可以执行这些功能
//var fun = new Function( "console.log('我很开心')");这是构造函数
function fun() {
console.log("我很开心");
}
fun();
var fun3 = function () {
console.log(123); //匿名函数
};
fun3();
function sum(a,b){
console.log(a+b);
}
sum(4,7);
return 后面不价值,或者不写return 将都会返回undifined;
当函数的参数过多时,我们需要把参数封装到一个对象中,然后通过对象传递,
var people = {
name :"笨笨",
age : 13,
gender : "男",
}
function fun(people){
console.log("我是"+people.name+",我"+people.age+ "岁了"+"我是"+people.gender+"性");
}
this
this指向的是一个对象,这个对象我们称为函数执行的上下文对象,根据函数的调用方式不同,this会指向不同的对象,
1以函数形式调佣,this指向window
2以方法形式调用,this指向调佣对象。
function fun() {
console.log(this);
}
var obj = {
name: "笨笨",
age: 14,
sayname: fun,
};
obj.sayname();//对象是obj
fun();//对象是window全局
var name = "全局";
function fun() {
console.log(name);
}
var obj = {
name: "笨笨",
age: 14,
sayname: fun,
};
var obj2 = {
name: "憨憨",
age: 18,
sayname: fun,
};
如果没有this 调用的东西就很不灵活,直接打印name 出现的结果就是全局
如果用this的话,就会变得灵活
var name = "全局";
function fun() {
console.log(this.name);
}
var obj = {
name: "笨笨",
age: 14,
sayname: fun,
};
var obj2 = {
name: "憨憨",
age: 18,
sayname: fun,
};
fun();
obj.sayname();
obj2.sayname();
构造函数
构造函数就是一个普通的函数,创建方式和普通函数没区别,不同的是构造函数习惯上首字母大写,构造函数和普通函数区别就是调用方式不同,普通函数是直接调用,而构造函数要使用new关键字来调用。
function creatpeople(name, age) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.sayhello = function () {
alert(this.name);
};
return obj;
}
var obj2 = creatpeople("笨笨", 16);
obj2.sayhello;
console.log(obj2);
obj2.sayhello;
function creatDog(name, age) {
var obj = new Object();//创建的是object类型的对象
obj.name = name;
obj.age = age;
obj.sayhello = function () {
alert("汪汪~");
};
return obj;
}
var dog = creatDog("狗狗", 23);
console.log(dog);
dog.sayhello();
创建一个构造函数,用来建造别的类型对象;
function Dog(name, age) {
this.name = name;
this.age = age;
this.sayhello = function () {
alert(this.name);
};
}
var dog = new Dog("笨笨", 7);
dog.sayhello();
但是这个这个类型就是Dog类;instanceof可以检测两个实例是否是同类型的