常规创建对象的方式
通过{},[] 来定义数组和对象
1.{ } 大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数。
2.[ ]中括号,表示一个数组,也可以理解为一个数组对象。
3.{ } 和[ ] 一起使用,我们前面说到,{ } 是一个对象,[ ] 是一个数组,我们可以组成一个对象数组
调用起来对象的属性用.(点)叠加,数组用 [下标] 来访问。
通过”字面量“的方式来创建对象
var person = {
name: "dongjc",
age: 32,
Introduce: function () { alert("My name is " + this.name + ".I'm " + this.age); }
};
person.Introduce();
person.worker = 'coding'; //丰富成员信息
调用方式
var ren ={};
ren.name="张三";
ren.sex="男";
ren.eat=function () {
alert("吃饭");
}
alert(ren.name);
alert(ren["name"]);
当我们创建一个对象 ren,会在栈内存中保存一个地址,栈为长度不可变的地址。
而栈中的地址就对应堆中的存储地址。堆中的存储地址,只要实例化会在堆中开辟一块空间,地址就是栈的地址,内容就是实例化对象里面的内容,如name,sex,eat。可以通过地址引用,访问里面的属性和方法。
当我们再实例化一个对象,又会保存另一个地址及开辟一块空间。
代码段,共同的属性或方法放在代码段中,不在堆中。只执行一次,节省内存空间。
通过object方式创建对象,动态添加属性和方法
var p=new Object();
p.name="Jack"; // 动态的添加属性
p.func=speak; // 动态的添加方法
alert(p.name);
p.func("Hello,Hello,大家好!");
delete p.name;
alert(p.name);
delete p.func;
p.func("Hello,Hello,大家好!");
p.name=undefined;
p.func=undefined;
alert(p.name);
p.func("Hello,Hello,大家好!");
通过Function函数来创建对象
小括号中最后一个参数是函数体,之前所有的参数都是形参.
var sayFunc=new Function("name","age","alert(name+'今年'+age+'岁了')");
// sayFunc("李四",4);
alert("sayFunc方法对象的方法参数个数:"+sayFunc.length);
alert(sayFunc.toString());//获取源码
alert(sayFunc.valueOf());//获取源码
函数劫持
函数劫持:改变javascript的预定义的函数预定义好的功能
window.alert = function(x){
document.write(x) ;
}
alert("abc") ;
a.如果两个函数的命名相同,后面的将会覆盖前面的函数。 b.以基本语法声明的函数,会在代码运行的时候,提前加载到内存当中,以供以后使用, 但是匿名函数形式命名的函数,会在执行到的时候,才进行赋值
c.在不同的块中的函数,使用和调用的时候,应该先定义,后执行。
通过工厂模式创建对象
工厂模式虽然解决多次创建相似对象的重复性问题,但是并没有解决对象识别问题,也就是typeof之后他都显示object,具体的对象是什么并没有显示
function createPerson(name,age,job)
{
var o=new Object();
o.name=name;
o.age=age;
o.job=job;
o.sayName=function(){
alert(this.name);//this指的是o
}
return o;
}
var person1=createPerson("Tom",23,"厨师");
person1.sayName();
创建科学、复用率高的对象
构造函数模式和工厂模式的区别
1.没有显式的创建对象。
2.将属性和方法赋给了this对象。
3.没有return语句。
4.函数名第一个字母大写。
构造函数模式优于工厂模式的原因就是,构造函数模式中的对象实例(person1)通过constructor属性或instanceof操作符可以验证person1既是Object的实例,也是Person的实例,同时也证明所有对象均来自于Object。
function person(name,age){
this.name2=name; //那个对象引用this就代表那个对象
this.age2=age; //通过this关键字设置默认成员
var worker = 'coding'; //没有this关键字,对象创建后,该变量为非成员只能在方法内部使用
function speak(something){
alert(something);
}
this.func=speak;
}
var p1=new person("Jack",12);
alert(p1.name2);
p1.func("Hello,EveryOne!");
function C(){
var privateFunc=function(){
alert("私有方法");
};
privateFunc();
this.objFunc=function(){
alert("对象方法");
};
C.prototype.objFunc2=function(){
alert("对象方法2");
};
}
C.classFunc=function(){
alert("类方法");
};
定义对象模拟数组
function myArray () {
var lengs= arguments.length;
for (var i=0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?