javascript面向对象 - JavaScript-面向对象-扩展内置对象方法
天蓬老师
天蓬老师 2017-04-11 11:07:51
[JavaScript讨论组]

建立自定义对象的方法

 function Person( ) { }
 Person.prototype={
       constructor:Person,
       name:"Jack",
       age:100,
       sayHi:function ( ) {
             alert("hello"+this.name);
       }
 };
 var p1=new Person( );
 p1.sayHi(); 

扩展内置对象(String)的方法

String.prototype={
        constructor:this,
        run:function () {
            alert("success!");
        }
    };

    var n="####";
    n.run();

后面的constructor属性不指向String对象(前面的constructor属性指向Person对象),这是为什么呢?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
阿神

你前面写了Person,后面写了this

伊谢尔伦

首先,看一下Stringprototype属性:

Object.getOwnPropertyDescriptor(String, 'prototype');

// 结果(环境:Chrome 51)
{value: String, writable: false, enumerable: false, configurable: false}

看到没有,writablefalse,是没法修改的。所以你的赋值无效。String作为一个内置的构造函数,是不允许你随便修改它的属性的。

即使是可以修改的,像你那样修改后prototype也是不会指向String的,而是需要这样:

String.prototype={
    constructor: String,
    run:function () {
        alert("success!");
    }
};

var n="####";
n.run();

用this是不行的。因为你代码中的this是位于全局作用域的,this是全局对象,例如window

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号