带有方法的Javascript对象返回;没有方法';我的方法名称'&引用;错误

带有方法的Javascript对象返回;没有方法';我的方法名称'&引用;错误,javascript,jquery,Javascript,Jquery,我正在尝试用JavaScript方法构建我自己的对象,但是,在我第一次尝试时失败了,下面的代码返回了完整的代码以及chrome开发工具控制台中的“has no method‘writeOut’” var link = function bhLink(options) { defaultOptions = { targetURL: '#', target: '_blank', textColor:

我正在尝试用JavaScript方法构建我自己的对象,但是,在我第一次尝试时失败了,下面的代码返回了完整的代码以及chrome开发工具控制台中的“has no method‘writeOut’”

    var link = function bhLink(options)  { 

        defaultOptions = {
            targetURL: '#',
            target: '_blank',
            textColor: '#000',
            bgColor: '#fff',
            font: 'Arial',
            fontSize:  '12px',
            lineHeight: '12px',
            text: '[Test]'
        }

            if (typeof options == 'object') {
                options = $.extend(defaultOptions, options);
            } else {
                options = defaultOptions;
            }

        link.prototype.writeOut = function() {
            return $('<a></a>')
                .prop({'href':this.targetURL, 'target': this.target})
                .css({'font-family':this.font, 'color':this.textColor, 'font-size': this.fontSize, 'line-height':this.lineHeight});
        }
    } // end link
单击事件和链接都在
$(document).ready({});
块中

有什么想法吗

编辑==============================================


添加了选项作为参数和if语句,以检查是否提供了选项。

对于尝试构建包含方法的对象,您的语法非常奇怪。首先,您试图通过使用
this
访问
defaultOptions
对象。其次,在中调用
writeOut
de>html()block只传递函数引用,不实例化函数。请尝试以下操作:

var link = {    
    defaultOptions: {
        targetURL: '#',
        target: '_blank',
        textColor: '#000',
        bgColor: '#fff',
        font: 'Arial',
        fontSize: '12px',
        lineHeight: '12px',
        text: '[Test]'
    },
    writeOut: function () {
        return $('<a></a>', { 
            'text': this.defaultOptions.text,
            'href': this.defaultOptions.targetURL,
            'target': this.defaultOptions.target
        })
        .css({
            'font-family': this.defaultOptions.font,
            'color': this.defaultOptions.textColor,
            'font-size': this.defaultOptions.fontSize,
            'line-height': this.defaultOptions.lineHeight
        });
    }    
} // end link

$('#id_of_some_button').click(function (e) {
    e.preventDefault();
    $('#id_of_some_div').append(link.writeOut());
});
var-link={
默认选项:{
targetURL:“#”,
目标:“\u blank”,
textColor:“#000”,
bgColor:“#fff”,
字体:“Arial”,
fontSize:'12px',
线宽:“12px”,
正文:“[测试]”
},
写出:函数(){

return$('

是否执行了
link
?如果没有,那么它还没有给出writeOut方法。通常方法是在构造函数之外添加到原型中的。第一个问题:
link.writeOut
访问属性,而
link.writeOut()
执行一个方法。评论员!请看我第一次尝试的地方。这里感到尴尬!:)谢谢Rory,它现在可以工作了。这是我第一次尝试,如果这看起来像垃圾,请原谅。但是你的回答肯定会给我一个好的开始。另外,我取出了函数接受选项对象作为参数的部分,如果我想检查参数是否有效,那么需要替换默认选项。在这个例如,您的答案将如何修改?例如,请在一分钟内查看我的问题的更新。如果您正在传递选项,则听起来更像是在创建插件。请尝试以下操作:。注意
$。扩展
行,该行使用传入插件调用的任何选项覆盖默认选项对象-注意我覆盖
文本
选项on@Emin没问题,很乐意帮忙。
var link = {    
    defaultOptions: {
        targetURL: '#',
        target: '_blank',
        textColor: '#000',
        bgColor: '#fff',
        font: 'Arial',
        fontSize: '12px',
        lineHeight: '12px',
        text: '[Test]'
    },
    writeOut: function () {
        return $('<a></a>', { 
            'text': this.defaultOptions.text,
            'href': this.defaultOptions.targetURL,
            'target': this.defaultOptions.target
        })
        .css({
            'font-family': this.defaultOptions.font,
            'color': this.defaultOptions.textColor,
            'font-size': this.defaultOptions.fontSize,
            'line-height': this.defaultOptions.lineHeight
        });
    }    
} // end link

$('#id_of_some_button').click(function (e) {
    e.preventDefault();
    $('#id_of_some_div').append(link.writeOut());
});