第一种:通过prototype来实现

prototype.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function Person(){}

Person.prototype.username = "lisi";
Person.prototype.gender = "man";
Person.prototype.fav = ["read","eat"];


var p1 = new Person();
var p2 = new Person();
p2.username = "zhangsan";
//p2.fav.push("run");
var fav = p2.fav;
console.log(fav)
p2.fav = new Array();
p2.fav = p2.fav.concat(fav);

p2.fav.push("run");

/*console.log(p1.username);
console.log(p1.fav);
console.log(p2.username);
console.log(p2.fav);*/

function User(){}
User.prototype = new Person();
User.prototype.password = "123123";
User.prototype.email = "admin@admin.com";

User.prototype.say = function(){
console.log(this);
};

var u = new User();
u.gretting="Hello";
var u1 = new User();

console.log(u.username)
u.say();
u1.say();

</script>
</head>
<body>

</body>
</html>

第二种方法:通过this关键字来实现;js中的this始终指向调用它的对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function Person(name,gender){
this.name = name;
this.gender = gender;
}

function User(name,gender,email,password){
this.super = Person;
this.super(name,gender);
delete this.super;
this.email = email;
this.password = password;
//this.Person(name,gender);
}

var p1 = new Person("lisi","man");

var u = new User("zhangsan","msn","zhnagsan@zhangsan.com","123123123");
console.log(p1.name);
console.log(u.name);
//var p2 = new Person();
//p2.name = "lisi";
//p2.gender = "man";
</script>
</head>
<body>

</body>
</html>

第三种方法:通过call或者apply来实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function Person(name,gender){
this.name = name;
this.gender = gender;
}

function User(name,gender,email){

//对象冒充 动态改变 函数的执行上下文
//Person.call(this,name,gender);
Person.apply(this,[name,gender]);

this.email = email;

this.say = function(msg){
console.log(this);
console.log(msg);
}
}

var u = new User("lisi","man","lisi@lisi.com");
console.log(u.gender);
u.say("Hello");

u.say.call(new Person("",""),"Hello1");
u.say.apply(window,["lisi"]);

console.log("--------------------")
var name = "lisi";
var obj = {
name:"zhangsan",
say:function(){
console.log(this.name);
return function(){
console.log(this.name);
return function(){
console.log(this.name);
return {
name:"wangwu",
say:function(){
console.log(this.name);
}

}
}
}
}
};

obj.say().call(obj)().say.apply(this);


//obj.say()();
</script>
</head>
<body>

</body>
</html>