JS 中对象的简单创建和继承
2015-04-04 16:51
344 查看
对象的简单创建
1.通过对象直接量创建
比如 var obj = {};
2.通过new 创建
比如 var obj = new Object(); // 相当于var obj = {};
var arr = new Array();
3.使用 Object.create()
这个方法有两个参数,第一个参数是这个对象的原型,第二个参数用以对对象的属性进行进一步描述(可选)
使用后obj将继承来自原型对象Object的属性,并具有obj.x = 1 的属性值
但当参数为null时,obj1则是一个没有原型的新对象,不会继承任何东西,甚至没有初始的toString()方法。
所以,如果仅仅是想创建一个空对象,有以下三种方式:
对象的简单继承:
可以通过原型继承创建一个新对象
以下函数inherit() 返回一个继承自原型对象p的属性的新对象
如上,obj1继承了来自obj对象定义的x属性
又如
对象属性相关操作涉及到了原型链的规则
值得注意的是:它总是在原始对象上创建属性或对已有的属性赋值,而不会去修改原型链;在JS中,只有在查询属性时才会体会到继承的存在,而设置属性则和继承无关。
还是代码解释吧
1.通过对象直接量创建
比如 var obj = {};
2.通过new 创建
比如 var obj = new Object(); // 相当于var obj = {};
var arr = new Array();
3.使用 Object.create()
这个方法有两个参数,第一个参数是这个对象的原型,第二个参数用以对对象的属性进行进一步描述(可选)
var obj = Object.create({x:1}); var obj1 = Object.create(null); console.log(obj instanceof Object);//true console.log(obj1 instanceof Object);//false
使用后obj将继承来自原型对象Object的属性,并具有obj.x = 1 的属性值
但当参数为null时,obj1则是一个没有原型的新对象,不会继承任何东西,甚至没有初始的toString()方法。
所以,如果仅仅是想创建一个空对象,有以下三种方式:
var obj = {}; var obj = new Object(); var obj = Object.create(Object.prototype);
对象的简单继承:
可以通过原型继承创建一个新对象
以下函数inherit() 返回一个继承自原型对象p的属性的新对象
function inherit(p){ if(p == null){ // 不能从null中继承 throw TypeError(); } if(Object.create){ //如果有这个方法就直接使用 return Object.create(p); } var t = typeof p; if(t !== "object" && t !== "function"){ //要继承的对象 类型要符合 throw TypeError(); } function f(){ }; //定义一个空的构造函数 f.prototype = p; //原型指向要继承的对象p return new f(); //创建f对象,此对象继承自p } var obj = {x:1}; var obj1 = inherit(obj); console.log(obj1.x); // 1
如上,obj1继承了来自obj对象定义的x属性
又如
function inherit(p){ if(p == null){ // 不能从null中继承 throw TypeError(); } if(Object.create){ //如果有这个方法就直接使用 return Object.create(p); } var t = typeof p; if(t !== "object" && t !== "function"){ //要继承的对象 类型要符合 throw TypeError(); } function f(){ }; //定义一个空的构造函数 f.prototype = p; //原型指向要继承的对象p return new f(); //创建f对象,此对象继承自p } var o = {}; //o 继承Object.prototype o.x = 1; var p = inherit(o); //p继承o和Object.prototype p.y = 2; var q = inherit(p); //q继承p和o和Object.prototype q.z = 3; console.log(q.x+q.y == q.z);//true
对象属性相关操作涉及到了原型链的规则
值得注意的是:它总是在原始对象上创建属性或对已有的属性赋值,而不会去修改原型链;在JS中,只有在查询属性时才会体会到继承的存在,而设置属性则和继承无关。
还是代码解释吧
var obj1 = {x:1}; var obj2 = inherit(obj1); console.log(obj1.x);//1 console.log(obj2.x);//1 obj2.x = 2; console.log(obj1.x);//1 console.log(obj2.x);//2
相关文章推荐
- JS对象的创建和继承
- js创建对象和继承
- JS通过Object创建简单对象
- js(十四)——简单对象创建和json
- js中的对象创建与继承
- JS如何创建对象和继承对象
- js创建对象 对象如何继承 及一些工具函数
- js(十六)——原型创建对象和继承
- 理解js的对象,对象创建,继承
- js 创建对象与原型链继承
- js创建最简单的对象
- js 对象深复制,创建对象和继承
- 50 JS-4 创建对象 继承
- 浅谈js对象的创建和对6种继承模式的理解和遐想
- js创建对象与继承
- js继承——从创建对象开始
- JS如何创建对象及实现继承
- js 对象创建及其继承的方法
- js加强:原型,创建对象分析,继承
- js 面向对象简单练习(继承)