对象的简单创建

1.通过对象直接量创建

比如 var obj = {};

2.通过new 创建

比如 var obj = new Object(); // 相当于var obj = {};

   var arr = new Array();

3.使用 Object.create()

这个方法有两个参数,第一个参数是这个对象的原型,第二个参数用以对对象的属性进行进一步描述(可选)

var obj = Object.create({x:});
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); //

如上,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);//
console.log(obj2.x);//
obj2.x = 2;
console.log(obj1.x);//
console.log(obj2.x);//

JS 中对象的简单创建和继承的更多相关文章

  1. 【转载】js中对象的使用

    原文链接:http://www.jb51.net/article/90256.htm[侵删] 简单记录javascript中对象的使用 一.创建对象 //创建一个空对象 var o={}; //创建一 ...

  2. js中对象转化成字符串、数字或布尔值的转化规则

    js中对象可以转化成 字符串.数字.布尔值 一.对象转化成字符串: 规则: 1.如果对象有toString方法,则调用该方法,并返回相应的结果:(代码通常会执行到这,因为在所有对象中都有toStrin ...

  3. js中对象的一些特性,JSON,scroll家族

    一.js中对象的一些特性 对象的动态特性 1.当对象有这个属性时,会对属性的值重写 2.当对象没有这个属性时,会为对象创建一个新属性,并赋值 获得对象的属性的方式 为元素设置DOM0级事件 二.JSO ...

  4. koa 基础(十七)原生 JS 中的类、静态方法、继承

    1.app.js /** * 原生 JS 中的类.静态方法.继承 * es5中的类和静态方法 */ function Person(name, age) { // 构造函数里面的方法和属性 this. ...

  5. [转]JS中对象与字符串的互相转换

    原文地址:http://www.cnblogs.com/luminji/p/3617160.html 在使用 JSON2.JS 文件的 JSON.parse(data) 方法时候,碰到了问题: thr ...

  6. JS中对象与字符串的互相转换

    在使用 JSON2.JS 文件的 JSON.parse(data) 方法时候,碰到了问题: throw new SyntaxError('JSON.parse'); 查询资料,大概意思如下: JSON ...

  7. js中json数据简单处理(JSON.parse()和js中嵌套html)

    js中json数据简单处理(JSON.parse()和js中嵌套html) 一.总结 1.html中嵌套js:<script>js代码</script> 2.js中嵌套html ...

  8. JS中对象继承方式

    JS对象继承方式 摘自<JavaScript的对象继承方式,有几种写法>,作者:peakedness 链接:https://my.oschina.net/u/3970421/blog/28 ...

  9. js中对象的创建

    json方式,构造函数方式,Object方式,属性的删除和对象的销毁 <html> <head> <title>js中的对象的创建</title> &l ...

随机推荐

  1. Scala 深入浅出实战经典 第58讲:Scala中Abstract Types实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...

  2. Nginx负载均衡深入浅出

    nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以按照轮询.ip哈希.URL哈希.权重等多种方式对后端服务器做负载均 ...

  3. nodejs 的安全

    1.connect中间件csrf 原理:在express框架中csrf 是通过connect 模块的中间件来解决的.其原理是在前端构造一个隐藏的表单域“_csrf” ,后端生成一个值,作为该表单域,然 ...

  4. Unity3D常用代码总结

    1 GUI汇总 function OnGUI() { GUI.Label(Rect(1,1,100,20),"I'm a Label"); //1 GUI.Box(Rect(1,2 ...

  5. Promise 使用心得

        this.testPromise=function(){         return new Promise(function(resolve,reject){             co ...

  6. VC中使用ATL库实现正则表达式匹配(ADODB::Error)

    1. 确保项目属性中ATL使用处于打开状态. 如VS中项目属性常规—ATL使用—静态链接到ATL 2. 在使用时加上头文件 #include "atlrx.h" 3. 使用示例代码 ...

  7. MFC的消息管理

    一般而言,与视图状态和用户输入有关的命令由视图类来处理,与文件操作有关的命令由文档类来处理,与窗口布局有关的命令由主框架类来处理,与程序的运行状态有关的命令由APP类来处理.

  8. Qt 判断文件是否存在

    包含头文件:<QFileInfo> 代码: QFileInfo file("文件路径"); if(file.exists()==false){文件不存在:}

  9. HTML5[3]:中文换行

    保证中文每行第一个字,不会出现标点符号 p { white-space: pre-wrap; }

  10. wireshark如何抓取本机包

    在进行通信开发的过程中,我们往往会把本机既作为客户端又作为服务器端来调试代码,使得本机自己和自己通信.但是wireshark此时是无法抓取到数据包的,需要通过简单的设置才可以. 具体方法如下: 方法一 ...