<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
function inherit(p){ //创建一个函数接收一个参数p p为一个对象
if(p == null) throw TypeError(); // p为空抛出错误 对象为空不接收任何属性和方法
if(Object.create) //检查有没有Object.create方法存在
return Object.create(p); //如果存在 返回Object.create(p)给函数 因为Object.create(p) 创建一个新对象 新对象的属性继承参数p对象的属性 函数继承参数p对象的属性
var t = typeof p; //参数p对象的类型 赋值给变量t
if(t !== "object" && t !== "function") throw TypeError(); //如果不是类型不是对象 并且 类型不是一个构造函数 例如 function aa(){} 因为构造函数本身是对象 原型是构造函数aa.prototype属性的值
function f(){}; //创建一个构造函数
f.prototype = p; //构造函数f的原型就是f.prototype属性的值p f属性继承原型属性 所以就继承p对象的属性
return new f(); //返回创建和初始化的新对象
}
var o = {x:13};
document.write(inherit(o).x); //函数inherit(o)继承对象o的属性x
/*
函数inherit(p)的返回值就是一个新对象 新对象的原型属性是参数p 对象的属性都继承原型属性prototype 因为新对象的原型型属性prototyp
的值是p对象 所以新创建的对象的属性继承自参数对象的属性
*/
</script>
</head>
<body>
</body>
</html>