一、原型:
<head>
<meta charset="UTF-8">
<title>原型</title>
<script type="text/javascript">
function Fun() {};
// console.log(Fun.prototype);//object对象
// console.log(Fun.prototype.constructor);//原型对象
// console.log(Date.prototype);//输出date对象
// console.log(Date.prototype.constructor);//输出date的原型对象
// console.log(Date.prototype.constructor === Date);//输出true
Fun.prototype.test = function () {//只有创建对象才能调用方法
console.log("test()");
}
var fun = new Fun();//new一个对象
// fun.test();/*就是调用test方法*/
console.log(typeof Date.prototype);//类型为object
</script>
</head>
<body>
</body>
</html>
二、原型链:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>原型链</title>
<script type="text/javascript">
function Fn() {
this.test1 = function () {
console.log("test1()");
}
}
console.log(Fn.prototype);
Fn.prototype.test2 = function () {
console.log("test2()");
}
var fn = new Fn();
fn.test1();
fn.test2();
console.log(fn.test3);//未定义的属性,返回undefined
</script>
</head>
<body>
</body>
</html>
三、原型链属性:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>原型链属性</title>
<script type="text/javascript">
function Fn() {};
Fn.prototype.a = "xxx";
var fn1 = new Fn();
// console.log(fn1.a);
var fn2 = new Fn();
fn2.a = "yyy";
// console.log(fn2.a);
// console.log(fn1.a);
function Person(name,age) {
this.name = name;
this.age = age;
}
Person.prototype.setName = function (name) {
this.name = name;
}
/*赋值的关系*/
var p1 = new Person("李四",21);
p1.setName("王五");
console.log(p1.name+","+p1.age);
</script>
</head>
<body>
</body>
</html>
四、显式原型和隐式原型:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>显式原型和隐式原型</title>
<script type="text/javascript">
/*定义一个构造函数*/
function Fn() {};
/*每一个函数都有一个prototype,即显示原型属性,默认指向object对象*/
// console.log(Fn.prototype);
var fn = new Fn();//内部执行的语句this.__proto__ = Fn.prototype;
console.log(fn.__proto__);//fn.__proto__为隐式原型,输出为object对象
console.log(fn.__proto__===Fn.prototype);
</script>
</head>
<body>
</body>
</html>