js对象构造函数用法

如何写一个js对象构造函数,首先得明白prototypenew这两个是什么意思,做啥的。prototype 属性使你有能力向对象添加属性和方法;而new是创建object + this指向object + __proto__指向,具体的解释可以点开网页看。

    <script>
        var Test = function () {
            //私有属性
            var prititle;
            //这里还可以加上点其他方法或者变量,因为用立即函数封装,test方法只能内部使用,即Test方法内可以使用,但外部无法使用,即var aaa=new Test(data);aaa.test()调用不到。
            //这么做的目的是因为某些属性和方法是暴露供外部使用,某些属性和方法是不暴露,只供内部使用,简而言之就是private和public的识别
            function prialert() {//私有方法
                alert("私有方法"+prititle);
            }
            //构造函数
            function test(title) {//由于执行new Test("哈哈"),相当执行test("哈哈")
                //给私有属性赋值
                prititle = title;
                //给公有属性赋值
                this.pubtitle=title;//this指向test(),由于函数最后return test,所以也可说指向于Test
            }
            //公有方法
            test.prototype.pubalert = function () {
                //内部方法可以调用私有属性或这私有方法
                alert("私有属性"+prititle);
                prialert();
            };
            
            //返回构造函数
            return test;//相当于test()=Test();
        }();//js要实现private和public就是通过立即执行函数(闭包)实现的

        var aaa=new Test("哈哈");
        aaa.pubalert();		//公用方法,可调用
        alert(aaa.prititle);//私有属性,调用不到
        aaa.prialert();//私有方法,调用不到
    </script>


如果想了解更多的的js对象封装的方法,大家可以看这篇 博客,针对博客后面写的 类jQuery 封装的js代码,我自己的理解

var Person = (function(window) {
        var Person = function(name) {
            return new Person.fn.init(name);//new个对象初始化
        }

        Person.fn = Person.prototype = {
            constructor: Person,
            init: function(name) {
                this.name = name;
                this.sayHello = function() {
                    this.makeArray();//this指向init函数,相当于init.makeArray();
                }
            },
            makeArray: function() {
                console.log(this.name);
            }
        }

		/*虽然把makeArray 等常用方法挂载到 Person.prorotype 下面,但还是会被 init 这个实例使用.
		执行这行代码后,init.prototype就会具有makeArray的方法,int就可以调用makeArray方法,否则就会报错.
		大家可以试着去掉Person.fn.init.prototype = Person.fn代码看看会怎么样
		*/
       Person.fn.init.prototype = Person.fn;

        return Person;
    })();//闭包函数
	 var p = Person('pawn');//无需 new 
    console.log(p);//返回int()对象
    p.sayHello();//执行int.sayHello()




  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在JavaScript中,构造函数是用来创建对象的特殊函数。通过使用构造函数,我们可以定义一个对象的属性和方法。构造函数可以使用new操作符来调用,并生成一个特殊类型的对象构造函数在面向对象的语言中很常见,如Java、C++、PHP等。 要创建一个构造函数,我们可以使用function关键字,并在函数体内定义对象的属性和方法。例如,下面是一个构造函数Person,它有name和age属性以及sayName方法: function Person(name, age) { this.name = name; this.age = age; this.sayName = function () { console.log(this.name); } } 通过使用new操作符来调用构造函数,我们可以创建一个新的对象,并将属性和方法添加到该对象上。例如,下面的代码创建一个名为person的对象,并调用其sayName方法来打印出名字:"Nicholas"。 let person = new Person("Nicholas", 29); person.sayName(); // 输出:"Nicholas" 需要注意的是,如果不使用new操作符调用构造函数,它就会被当作普通函数来调用,并将属性和方法添加到全局对象(在浏览器环境中通常是window对象)上。这可能会导致意外的结果。 例如,下面的代码在全局作用域中调用了Person函数,并将属性和方法添加到window对象上。然后,我们调用window对象上的sayName方法,输出结果为:"Greg"。 Person("Greg", 27); window.sayName(); // 输出:"Greg" 因此,在使用构造函数创建对象时,务必记得使用new操作符来调用构造函数,以确保正确地创建对象并将属性和方法添加到新创建的对象上。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值