js基础——面向对象(构造函数)
1、面向对象:类的标志,通过类可创建多个具有相同属性和方法的对象
2、创建对象
1)工厂模式方式:避免重复实例化但未能解决识别问题
function boss(name, age) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.run = function () {
return "姓名:" + this.name + ",年龄:" + this.age + ",我们都从属于boss"
};
return obj; //必须返回对象引用(obj),否则得不到对象
}
var boss1 = new boss("张三", 58);
console.log(boss1.run());
console.log(typeof boss1);//object
console.log(boss1 instanceof Object);//true 这里的boss1是boss对象的引用
function boss2(name, age) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.run = function () {
return "姓名:" + this.name + ",年龄:" + this.age + ",我们都从属于boss"
};
return obj; //必须返回对象引用(obj),否则得不到对象
}
var boss2 = new boss2("李四", 58);
console.log(boss2.run());
console.log(boss2 instanceof Object);//true 这里的boss2是boss2对象的引用
工厂模式都是object对象没办法区分
2)(构造函数方式:避免重复实例化并能解决对象识别问题)
function Boss(name,age) {
this.name = name;//this代表当前构造函数所声明的对象。
this.age = age;
this.run = function () {
return "姓名:"+this.name+",年龄:"+this.age+",我们都从属于Boss"
};
}
var employee1= new Boss("张三",18);//创建对象
console.log(employee1.run());
var employee2= new Boss("李四",25);
console.log(employee2.run());
console.log(employee1 instanceof Boss);//true
function Desk(name,age) {
this.name = name;//this代表当前构造函数所声明的对象。
this.age = age;
this.run = function () {
return "姓名:"+this.name+",年龄:"+this.age+",我们都从属于Boss"
};
}
var desk1= new Desk("张三",18);//创建对象
var desk2= new Desk("张三",18);//创建对象
console.log(desk1.run());
console.log(desk1 instanceof Boss);//false 说明已经识别到不是Boss对象的引用而是Desk对象的引用
console.log(desk1 instanceof Desk);//true
var o = new Object();//此时没有run方法,但是又想执行run方法就只能使用对象冒充
Desk.call(o,"hello",100);
alert(desk1.run);//构造函数中的方法执行时不加圆括号就是打印的引用地址,
alert(desk2.run);//分别打印 desk1.run 和 desk2.run 会将整个run方法打印出来且一样
alert(desk1.run == desk2.run);//false 比较的是引用地址(唯一性),引用类型是绝对不相等的
构造函数里的方法run()可以用new Function来代替(没必要,这样只是为了直观的看到是引用类型)
this.run = new Function (" return \'姓名:\' + this.name + \',年龄:\' + this.age + \',我们都从属于Boss
\'");
构造函数特点:
1.没有显示的创建对象(new Object),会自动在后台执行了new Object();
2.直接将属性和方法赋值给this对象
3.没有return语句
4.函数名和实例化构造名相同且大写,便于区别普通函数
5.通过构造函数创建对象,必须使用new运算符。(调用),普通函数调用是无效的
6.在构造函数体内,this代表当前构造函数所声明的对象。
7.所有构造函数的对象其实就是Object。
8.构造函数体内的方法的值是相等的,但是比较的是引用地址(唯一性),引用类型不相等(要想实现引用地址的一致
性,可将构造函数内部的方法run提出来通过全局来实现,但是没必要,因为run方法要是作为全局的则可直接调用,但
是直接调用又会报错,且明明是构造函数内部的方法却没有封装的感觉)
本文来自博客园,作者:小虾米吖~,转载请注明原文链接:https://www.cnblogs.com/LindaBlog/p/10984187.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」