字面量、调用系统的构造函数、自定义构造函数
function createObject(name,age) {
var obj=new Object();
obj.name=name;
obj.age=age;
obj.sayHi=function () {
console.log("您好");
};
return obj;
};
Student.prototype = {
//必须手动修改构造器的指向
constructor:Student,
height: "188",
weight: "70kg",
study: function () {
console.log("学习真好");
}
};
function Animal(name,weight) {
this.name=name;
this.weight=weight;
}
//动物的原型的方法
Animal.prototype.eat=function () {
console.log("天天吃东西");
};
//狗的构造函数
function Dog(color) {
this.color=color;
}
Dog.prototype=new Animal("哮天犬","50kg");//实现继承,Dog的实例对象可以调用eat方法
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
Person.prototype.sayHi = function () {
console.log("您好");
};
function Student(name,age,sex,score) {
//借用构造函数
Person.call(this,name,age,sex);//构造函数名字.call(当前对象,属性,属性,属性....);
this.score = score;
}
因为改变原型指向的继承方法直接初始化了属性,继承过来的属性的值都是一样的了,而这种继承方法就解决了这个问题,但缺陷是父级类别中的方法不能继承
function Person(name,age,sex) {
this.name=name;
this.age=age;
this.sex=sex;
}
Person.prototype.sayHi=function () {
console.log("你好");
};
function Student(name,age,sex,score) {
//借用构造函数:属性值重复的问题
Person.call(this,name,age,sex);
this.score=score;
}
//改变原型指向----继承
Student.prototype=new Person();//不传值
Student.prototype.eat=function () {
console.log("吃东西");
};
var stu=new Student("小黑",20,"男","100分");
即改变原型的指向,又使用call方法,属性和方法都被继承了
function f1() {
console.log("我是函数");
}
f1();
var ff=function () {
console.log("我也是一个函数");
};
ff();
区别:两种函数表达在进行预解析的时候会有不同,函数声明如果放在if-else的语句中,在IE8的浏览器中会出现问题,尽量多用函数表达式
function f1(x, y) {
console.log((x + y) + ":=====>" + this.age);
}
function Person() {
this.age = 1000;
}
var per = new Person();
var ff = f1.bind(per,10,10);
ff();
//以上是在复制是时候传参数进去
function f1(x, y) {
console.log((x + y) + ":=====>" + this.age);
}
function Person() {
this.age = 1000;
}
var per = new Person();
var ff = f1.bind(per);
ff(10,10);
//以上是复制之后在调用的时候传参数进去
function f2() {
var num = 10;
return function () {
num++;
console.log(num);
}
}
var ff = f2();
ff();//11
ff();//12
ff();//13
//第一种
(function () {
var num=10;
console.log(num);
})();
//第二种
(function () {
var num=20;
console.log(num+10);
}());